博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue 组件 data为什么是函数
阅读量:4677 次
发布时间:2019-06-09

本文共 1068 字,大约阅读时间需要 3 分钟。

在创建或注册模板的时候,传入一个data属性作为用来绑定的数据。但是在组件中,data必须是一个函数,而不能直接把一个对象赋值给它。Vue.component('my-component', {  template: '
hello Vue
', data() { return {} // 返回一个唯一的对象,不要和其他组件共用一个对象进行返回!!! },})

你在前面看到,在new Vue()的时候,是可以给data直接赋值为一个对象的。这是怎么回事,为什么到了组件这里就不行了。

实际上,它首先需要创建一个组件构造器,然后注册组件。注册组件的本质其实就是建立一个组件构造器的引用。使用组件才是真正创建一个组件实例。所以,注册组件其实并不产生新的组件类,但会产生一个可以用来实例化的新方式。理解这点之后,再理解js的原型链:

var MyComponent = function() {}MyComponent.prototype.data = {  a: 1,  b: 2,}// 上面是一个虚拟的组件构造器,真实的组件构造器方法很多var componentA = new MyComponent()var componentB = new MyComponent()// 上面实例化出来两个组件实例,也就是通过
调用,创建的两个实例componentA.data.a === componentB.data.a // truecomponentA.data.b = 5componentB.data.b // 5

可以看到上面代码中最后三句,这就比较坑爹了,如果两个实例同时引用一个对象,那么当你修改其中一个属性的时候,另外一个实例也会跟着改。这怎么可以,两个实例应该有自己各自的域才对。所以,需要通过下面方法来进行处理:

var MyComponent = function() {  this.data = this.data()}MyComponent.prototype.data = function() {  return {    a: 1,    b: 2,  }}

这样每一个实例的data属性都是独立的,不会相互影响了。所以,你现在知道为什么vue组件的data必须是函数了吧。这都是因为js本身的特性带来的,跟vue本身设计无关。

转载于:https://www.cnblogs.com/lhl66/p/8698549.html

你可能感兴趣的文章
跟我一起写 Makefile
查看>>
C# uri
查看>>
GPS定位 测试
查看>>
前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查
查看>>
探索从 MVC 到 MVVM + Flux 架构模式的转变
查看>>
传统认知PK网络认知 刚子扯谈烤串认知
查看>>
字节数组java加密与解密
查看>>
矩形运算
查看>>
php 备份mysql数据库(joomla数据库可直接使用,其他数据库稍作修改即可)
查看>>
使用HttpSessionListener接口监听Session的创建和失效
查看>>
20181029 T2 寻宝游戏
查看>>
C++变量作用域、生存期、存储类别
查看>>
GOF23设计模式
查看>>
Python自然语言处理学习笔记(41):5.2 标注语料库
查看>>
山寨“饿了么”应用中添加菜品数量按钮效果
查看>>
TCP/IP系列——长连接与短连接的区别
查看>>
Linux基础——常用命令
查看>>
Python学习笔记三(文件操作、函数)
查看>>
二进制分组
查看>>
[ACM] POJ 1068 Parencodings(模拟)
查看>>