Vue组件中的data必须是一个function的原因浅析


Posted in Javascript onSeptember 03, 2018

组件可以有自己的data,并且data必须是一个function。

在下面这个例子中,data 返回了一个在外部定义的对象。并且这个组件在页面中使用了3次,点击+1时出现了如下情况:data中的count属性影响到了所有实例。

Vue组件中的data必须是一个function的原因浅析

<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必须是一个function的原因浅析

  补充:下面看下vue组件中data必须是一个函数的原因

  vue组件中data值不能为对象,因为对象是引用类型,组件可能会被多个实例同时引用。如果data值为对象,将导致多个实例共享一个对象,其中一个组件改变data属性值,其它实例也会受到影响。

上面解释了data不能为对象的原因,这里我们简单说下data为函数的原因。data为函数,通过return 返回对象的拷贝,致使每个实例都有自己独立的对象,实例之间可以互不影响的改变data属性值。

data为函数的示例:

data:function(){
  return {
      k1: 'v1',
      k2: 'v2',
    ...
  }
}

总结

以上所述是小编给大家介绍的Vue组件中的data必须是一个function的原因浅析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Tips 带三角可关闭的文字提示
Oct 06 Javascript
使用jquery实现图文切换效果另加特效
Jan 20 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
Jan 26 Javascript
jQuery实现的原图对比窗帘效果
Jun 15 Javascript
使用npm发布Node.JS程序包教程
Mar 02 Javascript
js调出上下文菜单的实例
Dec 17 Javascript
Javascript实现的SHA-256加密算法完整实例
Feb 02 Javascript
微信小程序 switch组件详解及简单实例
Jan 10 Javascript
babel之配置文件.babelrc入门详解
Feb 22 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
Apr 12 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 Javascript
React实现todolist功能
Dec 28 Javascript
ES6中let 和 const 的新特性
Sep 03 #Javascript
Angular项目如何升级至Angular6步骤全纪录
Sep 03 #Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 #Javascript
前后端如何实现登录token拦截校验详解
Sep 03 #Javascript
vue移动端监听滚动条高度的实现方法
Sep 03 #Javascript
vue 纯js监听滚动条到底部的实例讲解
Sep 03 #Javascript
解决vue.js this.$router.push无效的问题
Sep 03 #Javascript
You might like
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
cakephp常见知识点汇总
2017/02/24 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
Python实现简单登录验证
2016/04/13 Python
Python中functools模块函数解析
2017/03/12 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
Python-split()函数实例用法讲解
2020/12/18 Python
高山背包:High Sierra
2017/11/23 全球购物
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
法学专业毕业生自荐信范文
2013/12/18 职场文书
农民入党思想汇报
2014/01/03 职场文书
公务员综合考察材料
2014/02/01 职场文书
学术会议领导致辞
2015/07/29 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python