Vue组件里面data为什么必须是个函数
在创建或注册模板的时候,传入一个data属性用来绑定数据,但是在组件中,data必须是一个函数,而不能直接把对象赋值给它。
export default {
name:'app',
data(){
return {
}
},
methods:{
}
}
上面的组件,是一个简易操作,实际上它首先需要创建一个组建构造器,然后注册组件,注册组件的本质其实就是建立一个组件构造器的引用,使用组建才是真正创建一个组件实例。所以,注册组件其实并不产生新的组件类,但会产生一个可以用来实例化的新方式。
理解这点之后,再理解js的原型链:
var MyComponent=function(){}
MyComponent.prototype.fata={
a:1,
b:2
}
上面是一个虚拟的组件构造器,真是的组件构造器方法很多。
var component1=new MyComponent();
var component2=new MyComponent();
上面代码实例化出来两个组件实例,也就是通过<my-component>调用,创建两个实例(vue里面组件可以在任何地方多次当子组件引入)。
component1.data.a=component2.data.a //true
component1.data.b=5
component2.data.b //5
上面代码中比较坑,如果两个实例同时引用了一个对象,那么当你修改其中一个属性的时候,另一个实例也会跟着修改,,两个实例应该各自有各自的域才对,所以需要通过下面的方式处理:
var MyComponent=function(){
this.data=this.data();
}
MyComponent.prototype.data=function(){
return {
a:1,
b:2,
}
}
这样每一个实例的data属性都是独立的,不会互相影响。所以vue组件里面的data必须是一个函数,这是因为js本身的特性带来的,跟vue本身设计无关,其实vue不应该把方法名叫data(),而应该叫setData()更形象。
Vue组件里面data为什么必须是个函数的更多相关文章
- vue组件中data为什么必须是个函数
<body> <div id="app"> <counter></counter> </div> <templat ...
- vue组件中data为什么必须是一个函数?
因为JavaScript的特性所导致,在component中,data必须以函数的形式存在,不可以是对象. 组建中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一 ...
- 黑马vue---61、为什么vue组件的data要是一个函数
黑马vue---61.为什么vue组件的data要是一个函数 一.总结 一句话总结: 因为js中以函数为变量作用域,所以这样可以保证每个组件的数据不互相影响 二.why components data ...
- Vue 组件中 data 为什么必须是函数
原文地址 vue组件中的data必须是函数 类比引用数据类型 Object是引用数据类型,如果不用function 返回,每个组件的data 都是内存的同一个地址,一个数据改变了其他也改变了; jav ...
- 怎样理解 Vue 组件中 data 必须为函数 ?
组件意在 复用 , 若为 对象, 则会相互干扰. 且 Vue 不允许此事发生, 规定必须为函数, 否则报错. 原理如下 对象 // 模拟创建组件 var Component= function() { ...
- vue组件中data是个函数
当我们const vm = new Vue({ el : '#app', data : { msg:‘hello World’ } })用习惯了,data是一个对象,可到了vue组件 Vue.co ...
- Vue 组件 data为什么是函数?
在创建或注册模板的时候,传入一个data属性作为用来绑定的数据.但是在组件中,data必须是一个函数,而不能直接把一个对象赋值给它. Vue.component('my-component', { t ...
- Vue 组件 data为什么是函数
在创建或注册模板的时候,传入一个data属性作为用来绑定的数据.但是在组件中,data必须是一个函数,而不能直接把一个对象赋值给它. Vue.component('my-component', { t ...
- vue基础篇---vue组件《2》
定义全局组件 我们通过Vue的component方法来定义一个全局组件. <div id="app"> <!--使用定义好的全局组件--> <coun ...
随机推荐
- java基础---->java自带的xml解析
在查看公司框架的源码的时候,发现框架用的是jdk自带的xml解析.今天,想着对它总结一下.从未放弃过爱你,只是从浓烈变得悄无声气. 利用jdk自带的xml创建文档 一. CreateXmlFile类如 ...
- Android遍历SqlLite cursor对象:
//1. Cursor c =...; for(c.moveToFirst(); ! c.isAfterLast(); c.moveToNext()){ //c… } //2. Cursor curs ...
- maven web框架搭建
前面我们描述了如何使用maven搭建一个最基本的Java Project 框架.在实际生产应用中,一般不会仅仅建立一个最基本的Java Project项目,目前 Java Web 开发已经成为Java ...
- 常用SEO优化技巧
SEO是指搜索引擎优化 搜索引擎优化是一种利用搜索引擎的搜索规则来提高目前网站在有关搜索引擎内的自然排名的方式.SEO的目的理解是:为网站提供生态式的自我营销解决方案,让网站在行业内占据领先地位,从而 ...
- spring-boot 打包成 war包发布
1.用maven打包成war包 2.将war包用zip方式打开,删除里面的tomcat-embed相关的4个包,删除spring-boot-tomcat包 3.将删除了tomcat相关嵌入包后的war ...
- kibana5.6源码分析3--目录结构
kibana5.6的项目目录结构: bin:系统启动脚本目录 config:kibana配置文件目录 data:估计是缓存一些系统数据的,uuid放在这里面 docs: maps:此目录包含TileM ...
- python的os模块命令
https://www.cnblogs.com/weiyiming007/p/8493913.html
- python和shell之间变量的相互调用
python -> shell: 1.环境变量 2.字符串连接 3.通过管道 import os var=’123’ os.popen(’wc -c’, ’w’).write(var) 4.通过 ...
- R语言 dbWriteTable 写入数据库 为空和乱码问题
在windows环境下 用RMySQL 写入数据库中文数据为空 或者乱码问题. 找了下资料 一般情况是 用 insert 语句插入,结合现有业务有点麻烦,放弃了. 还有一种方式换平台,由于经常在win ...
- oracle的相关信息
[INS-08109] :https://blog.csdn.net/u012830807/article/details/17302919[INS-13001]:https://blog.csdn. ...