当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。
<div id="app">
{{ a }}
</div>
var data = { a : 1 };
var vm = new Vue({
el: '#app',
data: data
})
需要注意的是,这里的“ data: data ”中我们没有像之前那样的“ data: { a:1 } ”,我们在这里声明了一个名为“data”的变量,“:”前后的“data”含义是不同的,前面那个是Vue()的data数据,后米那个是代表数据的变量。
下面我们进行一些调用:
data.a = "Hi World"
这里我们是对变量data进行了修改,同时下面的语句也能达到同样的效果:
vm.a = "test"
这样也能修改变量的值。但是如果我们在HTML中增加一个变量:
<div id="app">
{{ a }}{{ b }}
</div>
然后在不对data的声明做修改的情况下,给b一个值:
var data = { a : 1 };
var vm = new Vue({
el: '#app',
data: data
})
vm.b = "test"//或data.b = "test"
我们会发现页面中并没有渲染对应的内容。但是如果我们将“ data.a = “Hi World” ”加上,就会发现内容都能正常的渲染了。
还有一种方法可以让响应系统不能再追踪变化:
var data = {a : 1};
Object.freeze(data)
var vm = new Vue({
el: '#app',
data: data
})
这时,我们就无法通过data.a或vm.a的方式去改变变量的值了。
Vue实例中还暴露了一些有用的实例 property 与方法。它们都有前缀 $,以便与用户定义的 property 区分开来。诸如:
var data = { a: 1 }
var vm = new Vue({
el: '#example',
data: data
})
vm.$data.a = "Hi"//效果与data.a = "Hi"相同
vm.$el//效果与document.getElementById('example')相同 ,=> true
下面我们要介绍一下$watch()方法,这个方法能够观察一个变量的变化,并获取变量变化前后的结果。
<script type="text/javascript">
var data = { a : 1 };
var vm = new Vue({
el: '#app',
data: data
})
vm.$watch('a', function(newValue, oldValue) {
console.log(newValue, oldValue);
})
vm.$data.a = "Hi World"
</script>
这里我们打开控制台就能看见