数据与方法

当一个 Vue 实例被创建时,它将 data 对象中的所有的属性加入到 Vue 的响应式系统中。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

  1. // 我们的数据对象
  2. var data = { a: 1 }
  3. // 该对象被加入到一个 Vue 实例中
  4. var vm = new Vue({
  5. data: data
  6. })
  7. // 获得这个实例上的属性
  8. // 返回源数据中对应的字段
  9. vm.a == data.a // => true
  10. // 设置属性也会影响到原始数据
  11. vm.a = 2
  12. data.a // => 2
  13. // ……反之亦然
  14. data.a = 3
  15. vm.a // => 3

当这些数据改变时,视图会进行重渲染。值得注意的是只有当实例被创建时 data 中存在的属性才是响应式的。也就是说如果你添加一个新的属性,比如:

  1. vm.b = 'hi'

那么对 b 的改动将不会触发任何视图的更新。如果你知道你会在晚些时候需要一个属性,但是一开始它为空或不存在,那么你仅需要设置一些初始值。比如:

  1. data: {
  2. newTodoText: '',
  3. visitCount: 0,
  4. hideCompletedTodos: false,
  5. todos: [],
  6. error: null
  7. }

这里唯一的例外是使用 Object.freeze(),这会阻止修改现有的属性,也意味着响应系统无法再追踪变化。

  1. var obj = {
  2. foo: 'bar'
  3. }
  4. Object.freeze(obj)
  5. new Vue({
  6. el: '#app',
  7. data: obj
  8. })
  1. <div id="app">
  2. <p>{{ foo }}</p>
  3. <!-- 这里的 `foo` 不会更新! -->
  4. <button v-on:click="foo = 'baz'">Change it</button>
  5. </div>

除了数据属性,Vue 实例还暴露了一些有用的实例属性与方法。它们都有前缀 $,以便与用户定义的属性区分开来。例如:

  1. var data = { a: 1 }
  2. var vm = new Vue({
  3. el: '#example',
  4. data: data
  5. })
  6. vm.$data === data // => true
  7. vm.$el === document.getElementById('example') // => true
  8. // $watch 是一个实例方法
  9. vm.$watch('a', function (newValue, oldValue) {
  10. // 这个回调将在 `vm.a` 改变后调用
  11. })

以后你可以在 API 参考中查阅到完整的实例属性和方法的列表。