国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue組件中的data必須是一個function的原因淺析

2019-11-19 13:03:17
字體:
來源:轉載
供稿:網友

組件可以有自己的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的原因淺析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 论坛| 伊金霍洛旗| 永登县| 顺昌县| 丹棱县| 安岳县| 巴中市| 桦川县| 石屏县| 集贤县| 和政县| 安化县| 宜兰市| 蒙自县| 石台县| 富锦市| 库伦旗| 繁峙县| 佛学| 富蕴县| 广南县| 德化县| 新津县| 临洮县| 怀化市| 万荣县| 望城县| 大兴区| 神农架林区| 新安县| 萨迦县| 申扎县| 长白| 昌吉市| 朝阳区| 清新县| 宁河县| 罗田县| 湟源县| 保亭| 东丰县|