详解Vue的组件中data选项为什么必须是函数


Posted in Javascript onAugust 17, 2020

官方解释

data 必须是函数

构造 Vue 实例时传入的各种选项大多数都可以在组件里使用。只有一个例外:data 必须是函数。实际上,如果你这么做:

Vue.component('my-component', {
 template: '<span>{{ message }}</span>',
 data: {
 message: 'hello'
 }
})

那么 Vue 会停止运行,并在控制台发出警告,告诉你在组件实例中 data 必须是一个函数。但理解这种规则为何存在也是很有益处的,所以让我们先作个弊:

<div id="example-2">
 <simple-counter></simple-counter>
 <simple-counter></simple-counter>
 <simple-counter></simple-counter>
</div>
var data = { counter: 0 }
Vue.component('simple-counter', {
 template: '<button v-on:click="counter += 1">{{ counter }}</button>',
 ```
 // 技术上 data 的确是一个函数了,因此 Vue 不会警告,
 // 但是我们却给每个组件实例返回了同一个对象的引用
 ```
 data: function () {
 return data
 }
})
new Vue({
 el: '#example-2'
})

=============以下为个人理解,如果有误,请指出,谢谢指教

Vue.component('xxx',{
template:'{{counter}}',
data:function(){
return counter=0;
}
})

Vue在注册到全局/局部并生成实例时,它是具有自己的作用域的,也就是说

在template 字符串模板中如果存在一个变量名与VUE实例的变量名一致的时候,这个变量只会是组件中的变量,而不会是VUE的全局变量

比如

//以下代码中,组件中的count和Vue中的count是一样的变量名,但是在组件中只会显示0而不是2
Vue.component('simple-counter',{
    template:'<button>{{count}}</button>',
    data:function(){
     return count=0;

    }

   });
   vm=new Vue({
    el:'#example-2',
    data:{
     count:2

    }

   })

以上代码从原型链上理解

var component=function(){}//为了让组件有自己的作用域,它必须包含私有变量data,所以简单化的理解应该是这样的

var component=function(){
this.data=this.data();//存在私有的data属性
}

component.propotype.data=function(){
return {count:0}
}
//当我们在template中使用数据的时候,我们是调用的component的私有变量data
//如果我们不以函数的形式处理又会如何呢?
var component=function(){
//不存在私有的data属性
}
component.propotype.data= {count:0}
//此时,data不作为私有变量,就会有暴露的风险,而且,它指向的是{count:0}的引用,所以当重复创建组件的时候,component的data都指向了同一个引用。因此会相互影响。

如果不以原型链的形式处理,也可以不传入函数

function component(d) {

    this.data = d;
   }
var com = new component({
    count: 1
   });
   var com1 = new component({
    count: 1
   });

总结

到此这篇关于详解Vue的组件中data选项为什么必须是函数的文章就介绍到这了,更多相关Vue组件中data选项是函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript编程起步(第七课)
Feb 27 Javascript
javascript实现可改变滚动方向的无缝滚动实例
Jun 17 Javascript
js动画效果制件让图片组成动画代码分享
Jan 14 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
Oct 15 Javascript
微信小程序 教程之列表渲染
Oct 18 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
Dec 21 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
基于node下的http小爬虫的示例代码
Jan 11 Javascript
JS内部事件机制之单线程原理
Jul 02 Javascript
微信小程序实现展示评分结果功能
Feb 15 Javascript
vue和better-scroll实现列表左右联动效果详解
Apr 29 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 Javascript
Openlayers实现扩散的动态点(水纹效果)
Aug 17 #Javascript
openLayer4实现动态改变标注图标
Aug 17 #Javascript
openlayers4实现点动态扩散
Aug 17 #Javascript
Vue实现计算器计算效果
Aug 17 #Javascript
vue-model实现简易计算器
Aug 17 #Javascript
Vue实现手机计算器
Aug 17 #Javascript
Vuex实现购物车小功能
Aug 17 #Javascript
You might like
如何在PHP中进行身份认证
2006/10/09 PHP
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
JS 表单验证大全
2011/11/23 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
bootstrap table小案例
2016/10/21 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
js省市区级联查询(插件版&amp;无插件版)
2017/03/21 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
Python装饰器用法实例分析
2019/01/14 Python
PyQt5实现简易电子词典
2019/06/25 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
事业单位请假制度
2014/01/13 职场文书
倡议书格式
2014/08/30 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
酒桌上的开场白
2015/06/01 职场文书
环境卫生标语
2015/08/03 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书