當(dāng)前位置:首頁 > IT技術(shù) > 其他 > 正文

27. 組件可以訪問Vue實(shí)例數(shù)據(jù),如何訪問? 實(shí)現(xiàn)響應(yīng)式。
2022-05-31 17:13:13

組件可以訪問Vue實(shí)例數(shù)據(jù)嗎?

答案是: 不行!,我們都說組件的復(fù)用了,所以呢 組件訪問不了VUE實(shí)例中的data 數(shù)據(jù),如果訪問會報錯 我試過了:

vue.js:635?[Vue?warn]:?Property?or?method?"a"?is?not?defined?on?the?instance?but?referenced?during?render.?Make?sure?that?this?property?is?reactive,?either?in?the?data?option,?or?for?class-based?components,?by?initializing?the?property.?See:?https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.

found?in

--->?<MCpn>
???????<Root>

?

組件中的數(shù)據(jù)是保存在哪里呢?頂層的Vue實(shí)例中嗎?

我們發(fā)現(xiàn)不能訪問,而且即使可以訪問,如果 將所有的數(shù)據(jù)都放在Vue實(shí)例中,Vue實(shí)例就會 變的非常臃腫。

結(jié)論:Vue組件應(yīng)該有自己保存數(shù)據(jù)的地方。

?

這里說我a沒定義,那么怎么樣去訪問呢:

組件對象也有一個data屬性(也可以有methods等屬性,下面我們有用到)

只是這個data屬性必須是一個函數(shù)

而且這個函數(shù)返回一個對象,對象內(nèi)部保存著數(shù)據(jù)

為什么data必須是一個函數(shù)呢? 因?yàn)榻M件的復(fù)用性,組件必須要有獨(dú)立的數(shù)據(jù) ,換句話說 每個組件都要是獨(dú)立的,如果都共享一個數(shù)據(jù),那么一改全改那就很不安全什么的,,,,,

代碼:

<template?id="bihu">
??????<div>
<!--????這里訪問后臺data?的?a?和?b????-->
????????<h2>{{a}}</h2>
????????<p>{}</p>
??????</div>
??</template>

??<div?id="app">
??<cpn></cpn>
??</div>


??<script?src="vue.js"></script>

??<script>
????//注冊一個全局組件
????Vue.component('cpn',{
??????template:"#bihu",
??????data(){
????????return?{a:"我是a",b:"我是b"}
??????}
????})

????const?app?=?new?Vue({
????el:"#app"
????})

??</script>

看見沒 ,組件也有data屬性,但是他一定要是個函數(shù)(上面是ES6寫法),返回的是對象,里面保存著數(shù)據(jù)。

其實(shí)不止data屬性 還有methods屬性,里面可以定義方法, 【我們學(xué)習(xí)要溫故而知新】

?

下面寫個例子: 組件開發(fā)計數(shù)器:

<template?id="calc">
??????<div>
????????<h2>計數(shù)器</h2>
????????<p>當(dāng)前數(shù):{{count}}</p>
????????<input?type="button"?value="+"?@click="add">
????????&nbsp;&nbsp;&nbsp;&nbsp;
????????<input?type="button"?value="-"?@click="sub">
??????</div>
??</template>

??<div?id="app">
??<calc></calc>

??</div>


??<script?src="vue.js"></script>

??<script>


????const?app?=?new?Vue({
??????el:"#app",
??????components:{
????????'calc':{
??????????template:"#calc",
??????????data(){
????????????return?{
??????????????count:0
????????????}
??????????},
??????????methods:{
????????????add(){
??????????????this.count++;
????????????},
????????????sub(){
??????????????this.count--;
????????????}
??????????}
????????}
??????}
????})

??</script>

所以你可以嘗試 多用幾個calc標(biāo)簽 就有多個計數(shù)器 但是里面的數(shù)據(jù)都是獨(dú)立的? ,每個人的數(shù)字通過點(diǎn)擊都不一樣


作者:??咸瑜???


本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務(wù)立即開通 >