Vue数据绑定

gitHub地址:https://github.com/lily1010/vue_learn/tree/master/lesson04

一 双括号用来数据绑定

(1)写法一: {{message}},这种可以实时响应

(2)写法二: {{*message}},单次插值,今后的数据变化就不会再引起插值更新了

(3)双括号标签也可以用在属性上

举个栗子:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>vue插值</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <style type="text/css">
            .lili-xiaoman {
                color: red;
            }
        </style>
    </head>
    <body>
        <div class="test">
            <p>{{message}}</p> <!--这个值可以实时响应-->
            <p>{{*message}}</p> <!--单次插值,今后的数据变化就不会再引起插值更新了,例如在控制台写入:myVue.message=123-->
            <p class="lili-{{message}}">双括号标签也可以用在属性上</p>
        </div>
        <script type="text/javascript">
            var myVue = new Vue({
                el: ".test",
                data: {
                    message:"xiaoman"
                }
            })
        </script>
    </body>
</html>

当我在控制台改变message时,{{*message}}不会跟着改变值

二 双括号里面可以为javascript单元表达式

比如(只支持单元表达式)

{{ number + 1 }}

{{ ok ? ‘YES‘ : ‘NO‘ }}

但是不支持

<!-- 这是一个语句,不是一个表达式: -->

{{ var a = 1 }}

<!-- 流程控制也不可以,可改用三元表达式 -->

{{ if (ok) { return message } }}

完整测试代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>vue双括号里面的内容</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <div class="test">
            <p>{{message+1}}</p> <!--JavaScript 表达式,但是只支持单元表达式-->
        </div>
        <script type="text/javascript">
            var myVue = new Vue({
                el: ".test",
                data: {
                    message:12
                }
            });

        </script>
    </body>
</html>

上面的输出是13

三 双括号可以放过滤器

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>vue数据绑定</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <div class="test">
            <p>{{message | sum}}</p>
        </div>
        <script type="text/javascript">
            Vue.filter("sum", function(value) {   //全局方法 Vue.filter() 注册一个自定义过滤器,必须放在Vue实例化前面
                return value + 4;
            });

            var myVue = new Vue({
                el: ".test",
                data: {
                    message: 12
                }
            });

        </script>
    </body>
</html>

上面代码的输出值是16

四 用指令绑定数据( 指令 是特殊的带有前缀 v- 的特性)

举个v-if的例子:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>vue数据绑定</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <div class="test">
            <p v-if="isShow">isShow控制着我是否显示1</p>
            <p v-if="!isShow">isShow控制着我是否显示2</p>
        </div>
        <script type="text/javascript">
            var myVue = new Vue({
                el: ".test",
                data: {
                    isShow: true,
                }
            });
        </script>
    </body>
</html>

上面只显示第一个div

五 v-bind绑定数据

需要注意事项:

(1) 直接在属性里面写{{}}也是正确的,因为Vue内部渲染的时候会把属性里面的双括号转为v-bind,这样会比直接用v-bind效率效率稍微慢一点

(2) v-bind可简写为 :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>vue数据绑定</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <div class="test">
            <a href={{url}}>点击我跳到百度首页</a> <!--这种写法没错,实际上在内部特性插值会转为 v-bind 绑定,这样会稍微降低效率-->
            <a v-bind:href="url">点击我跳到百度首页</a>  <!--简写为:href-->

            <div style="color: {{colorA}}">我是红色</div> <!--这种写法没错,实际上在内部特性插值会转为 v-bind 绑定,这样会稍微降低效率-->
            <div v-bind:style="{color: colorB}">我是绿色</div> <!--简写为:style-->
        </div>
        <script type="text/javascript">
            var myVue = new Vue({
                el: ".test",
                data: {
                    url: "https://www.baidu.com/",
                    colorA: ‘red‘,
                    colorB: ‘green‘
                }
            });
        </script>
    </body>
</html>

六 v-on绑定数据

(1) v-on是在vue的methods里面实现的

(2) v-on可以简写为 @

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>vue数据绑定</title>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    </head>
    <body>
        <div class="test">
            <button v-on:click="goAction()"> <!--可以简写为@click-->
                点击我跳到百度
            </button>
        </div>
        <script type="text/javascript">
            var myVue = new Vue({
                el: ".test",
                methods: {
                    goAction: function () {
                        location.href = "https://www.baidu.com/";
                    }
                }
            });
        </script>
    </body>
</html>
时间: 2024-10-05 08:27:30

Vue数据绑定的相关文章

vue数据绑定html

html标签的纯文本显示/被当做html标签处理: 1)使用两个大括号时,假如字符串内容是html标签,那么不会被转义: 2)使用三个大括号时,字符串内的html标签会被直接转义 a.两个大括号: 1 <div id="app"> 2 {{html}} 3 </div> 4 <script> 5 var vm = new Vue({ 6 el:"#app", 7 data: { 8 html:"<span>s

Vue 数据绑定语法

数据绑定语法 Vue.js 的模板是基于 DOM 实现的.这意味着所有的 Vue.js 模板都是可解析的有效的 HTML,且通过一些特殊的特性做了增强.Vue 模板因而从根本上不同于基于字符串的模板,请记住这点. 插值 文本 数据绑定最基础的形式是文本插值,使用 “Mustache” 语法(双大括号): <span>Message: {{ msg }}</span> Mustache 标签会被相应数据对象的 msg 属性的值替换.每当这个属性变化时它也会更新. 你也可以只处理单次插

vue数据绑定原理

来点基础知识: 属性值是函数的属性叫方法. 对象就是属性和方法的集合. 我们来谈谈属性. 属性表面上来看就好像是键值对 var 我是对象 = { 我是属性名:'我是属性值' } console.log(我是对象.我是属性名)//我是属性值 然后来介绍下一个增改属性的方法Object.defineProperty() Object.defineProperty(我是对象,'我是新增属性',{ // 这个对象是用来修饰属性的,即属性的特征属性 // 就是我们看到的属性值 value:'我是新增属性的

Vue数据绑定失效

首先,我们得明白Vue数据响应的原理: 以对象为例:当把一个JavaScript对象传给Vue实例的data选项时,Vue将遍历此对象所有的属性,并使用Object.defineProperty把这些属性全部转为getter/setter, 而getter/setter可以做到追踪依赖,在属性被访问和修改时通知变化. 那么,什么是getter/setter ? var person = { defaultname: 'tom', get name() { return this.defaultn

杂记--关于vue数据绑定原理

1.vue数据双向绑定(v-model) 主要实现依赖于数据的劫持,及观察订阅者模式的使用,其中Object.defineProperty()为核心 作用:定义或修改一个对象上的相关属性及其相关的操作 语法: Object.defineProperty(obj, prop, descriptor) 其中: obj: 需要被操作的目标对象 prop: 目标对象需要定义或修改的属性的名称 descriptor: 将被定义或修改的属性的描述符,分为数据描述符or存取描述符: 用bject.define

Vue数据绑定原理及简单实现

本篇文章中的代码只是部分片段,完整代码存放于github上https://github.com/Q-Zhan/simple-vue. 进入正文~实现数据绑定主要是要实现两个方面的功能:数据变化导致视图变化,视图变化导致数据变化.后者比较容易实现,就是监听视图的事件,然后在回调函数中改变数据.所以重点是数据变化时如何改变视图. 这里的思路是通过object.defineProperty()来对数据的属性设置一个set函数,设置后当数据改变时set函数就会被调用,我们就可以里面进行视图更新操作. 具

02 vue 数据绑定与指令

1.模板语法 在标记内通过模板语法:{{}}进行数据的绑定. {{}}内支持变量,方法名,计算属性,表达式,不支持语句. {{}}将数据解析为纯文本,如果需要解析为html,需要在标记上增加v-html指令. 2.属性绑定 在标记上,为标记属性绑定Vue数据时,不允许用模板语法,如下方式是不合法的. <!-- 错误写法 --> <a href="{{url}}">百度</a> 属性绑定需要使用vue指令v-bind实现 v-bind:属性名=&quo

vue数据绑定远原理

Object.defineProperty 数据劫持,给每个属性设置了get.set. class myvue { constructor(options){ this.$options = options; // 数据响应化 this.$data = options.data; this.observe(this.$data); } observe(value) { if(!value || typeof value !== 'object'){ return; } // 遍历该对象 Obje

从Vue.js源码角度再看数据绑定

## 写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:[https://github.com/answershuto/learnVue](https://github.com/answershuto/learnVue).在学习过程中,为Vue加上了中文的注释[https://github.com/answershuto/learnVue/tree/master/vue-src](http