vue组件data属性返回数据的问题?

<div id="app">
  <my-component></my-component>
  <my-component></my-component>
  <my-component></my-component>
</div>
<script>
    var data = {
      counter: 0
    };
    
    Vue.component('my-component', {
      template: '<button @click="counter++">{{ counter }}</button>',
      data: function() {
      return data;
        }
    });
    
    var app = new Vue({
      el: '#app'
    })
</script>

我知道这个点击任一button,counter都会+1。
但是,template: '<button @click="counter++">{{ counter }}</button>',这一行里面的counter不应该写成data.counter吗?为什么直接写对象里面的属性也可以使用?

阅读 3.7k
2 个回答

注意这里:

data: function() {
  return data;
}

这里的第一个data对象得到的是下面这个对象:

var data = {
      counter: 0
    };

第二个data并非是第一个data的属性,而是上面var声明的data的引用。
实际上相当于这样:

data: function() {
  return {
    counter:0
  }
}

有时候并非所有的变量声明都写在return里,这时候可以直接这样return。
当然也可以这样:

var key1 ={xxx:xxx};
data: function() {
  return {
    //一些已有变量
    key:value,
    //外部变量
    key1
  }
}

Vue 已经自动将counter绑定到数据对象上了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题