组件可以有自己的data,并且data必须是一个function。
在下面这个例子中,data 返回了一个在外部定义的对象。并且这个组件在页面中使用了3次,点击+1时出现了如下情况:data中的count属性影响到了所有实例。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="../css/bootstrap.css" rel="external nofollow" > <style type="text/css"> #app{ margin:20px; } </style> </head> <body> <div id='app'> <counter></counter> <counter></counter> <counter></counter> </div> <template id="tmp1"> <div> <input type="button" value="+1" @click="increment"> <h1>{{count}}</h1> </div> </template> </body> <script src="../lib/vue.js"></script> <script> var dataObj = {count:0} //这是一个计数器组件,每当点击按钮,让data中的count值加1 Vue.component('counter',{ template:'#tmp1', data:function(){ return dataObj }, methods:{ increment(){ this.count++ } } }) var vm = new Vue({ el:'#app', }) </script> </html>
而当data选项是一个函数的时候,每个实例可以维护一份被返回对象的独立的拷贝,这样各个实例中的data不会相互影响,是独立的。
Vue.component('counter',{ template:'#tmp1', data:function(){ return {count:0} }, methods:{ increment(){ this.count++ } } })
补充:下面看下vue组件中data必须是一个函数的原因
vue组件中data值不能为对象,因为对象是引用类型,组件可能会被多个实例同时引用。如果data值为对象,将导致多个实例共享一个对象,其中一个组件改变data属性值,其它实例也会受到影响。
上面解释了data不能为对象的原因,这里我们简单说下data为函数的原因。data为函数,通过return 返回对象的拷贝,致使每个实例都有自己独立的对象,实例之间可以互不影响的改变data属性值。
data为函数的示例:
data:function(){ return { k1: 'v1', k2: 'v2', ... } }
总结
以上所述是小编给大家介绍的Vue组件中的data必须是一个function的原因浅析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍在.vue文件中style是必须的吗?那script是必须的吗?为什么?相关面试题,主要包含被问及在.vue文件中style是必须的吗?那script是必须的吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 style 不是必须的,script 是必须的,而且必须要写上
本文向大家介绍Vue.use()在new Vue() 之前使用的原因浅析,包括了Vue.use()在new Vue() 之前使用的原因浅析的使用技巧和注意事项,需要的朋友参考一下 使用Vue前端框架开发有些时间了,官方文档对于插件开发也有详细的介绍。最近强迫症犯了,老在想为什么Vue.use函数执行,要在Vue实例化即new Vue(options)之前。解铃还须系铃人,这个问题只能通过看源码解决
本文向大家介绍React组件的构造函数是必须的吗?相关面试题,主要包含被问及React组件的构造函数是必须的吗?时的应答技巧和注意事项,需要的朋友参考一下 function组件不用考虑构造函数; 对于class组件,如果不写构造函数,默认会被隐式调用
在我的网站上,我允许人们上传图片画廊。当他们点击图像时,底部有一个下一个和上一个按钮,这样他们就可以很容易地在图像中来回滚动。 我在位于/opt/cpanel/ea-php72/root/usr/var/log/php-fpm的日志中得到以下错误/ 这是关于我代码中的以下行: 下面是该行附带的其他代码: 基本上,这段代码使用get_字段(“gallery”)获取gallery中的照片总数,并将该数
本文向大家介绍浅析vue中的MVVM实现原理,包括了浅析vue中的MVVM实现原理的使用技巧和注意事项,需要的朋友参考一下 现成MVVM 菜单教程 视图影响数据 数据影响视图 项目构架 mvvm.html mvvm.js compile把dom节点,放在内存中操作(到35分钟) 分类元素节点和文本节点(52分钟) 元素节点 文本节点 把data中的数据,显示在视图上(到1:16分) v-model
在以下代码中,我得到了此错误: TypeError[ERR_INVALID_ARG_TYPE]:原始参数的类型必须是Function。接收类型未定义 它说问题在第31行: 我在使用promisify图书馆时遇到问题。