bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Vue.js中provide/inject如何實現響應式數據更新-創新互聯

這篇文章主要介紹了Vue.js中provide/inject如何實現響應式數據更新,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創新互聯建站長期為上1000家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為平利企業提供專業的成都網站制作、網站設計,平利網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發。

首先假設我們在祖輩時候傳入進來是個動態的數據,官方不是說如果你傳入了一個可監聽的對象,那么其對象還是可響應的么?

parent父頁面:

export default {
 provide() {
  return  { foo: this.fonnB }
 },
 data(){
  return { fonnB: 'old word '} 
 }
created() {
  setTimeout(()=>{
   this.fonnB = 'new words';  // 這里僅僅foonB變化了,foo沒有變化
   this._provided.foo="new words"; // 這里foo變化了,但子組件獲得的foo 依舊是old words
   console.log( this._provided);
  },1000)
 },
}

child子頁面:

export default {
 inject:['foo'],
 data(){
  return { chilrfoo: this.foo } 
 },
 created() {
  setTimeout(()=>{
   // 子組件獲得的foo 依舊是old words
   console.log( this.foo)
  },2000)
 }
}

結果:

通過上面方式,經過驗證,子組件頁面都沒辦法實現響應更新this.foo的值。可能我們對官方理解還是有誤,下面通過網上資料和自己構思實現了響應式數據更新

示例(結果仍不可行)

很明顯上面再父組件定時器內我們是改變了數據源,這個時候我們就在想,我們改變的數據到底有沒有傳入到子孫組件中,那么要驗證這個問題,我們不妨可以在子孫組件中手動寫set 函數,computed 本身就只相當于一個get函數,當然,你也可以試試watch

parent父頁面:

export default {
provide() {
   return  { foo: this.fonnB }
  },
  data(){
   return {
    fonnB: 'old word'
   } 
  }
   created() {
   setTimeout(()=>{
    this.fonnB = "new words";  
    // 這里foo變化了,但子組件獲得的foo 依舊是old words
   },1000)

  },

 }

child子頁面:

export default {
  inject:['foo'],
  data(){
   return {
    childfooOld: this.foo
   } 
  },
  computed:{
    chilrdfoo() {
      return this.foo
    }
  },
 created () {
    console.log(this.foo)
    // -> 'old word'
    setTimeout(() => {
      console.log(this.chilrdfoo); // 這里計算屬性依舊是old words
    }, 2000);
   }
 }

通過computed,我們都知道data中有get/set,數據也是響應式的,但為什么沒更新,有點疑惑,如果有大佬知道能解釋清楚的可以探討。

但是,但是,但是!實際需求肯定沒有這么簡單,往往我們需要的是共享父組件里面的動態數據,這些數據可能來自于data 或者 store。 就是說父組件里面的數據發生變化之后,需要同步到子孫組件里面。這時候該怎么做呢?
我想的是將一個函數賦值給provide的一個值,這個函數返回父組件的動態數據,然后在子孫組件里面調用這個函數。
實際上這個函數存儲了父組件實例的引用,所以每次子組件都能獲取到最新的數據。代碼長下面的樣子:

Parent組件:

<template>
  <div class="parent-container">
   Parent組件
   <br/>
   <button type="button" @click="changeName">改變name</button>
   <br/>
   Parent組件中 name的值: {{name}}
   <Child v-bind="{name: 'k3vvvv'}" />
  </div>
</template>

<style scoped>
 .parent-container {
  padding: 30px;
  border: 1px solid burlywood;
 }
</style>

<script>
import Child from './Child'
export default {
 name: 'Parent',
 data () {
  return {
   name: 'Kevin'
  }
 },
 methods: {
  changeName (val) {
   this.name = 'Kev'
  }
 },
 provide: function () {
  return {
   nameFromParent: this.name,
   getReaciveNameFromParent: () => this.name
  }
 },
 // provide: {
 // nameFromParent: this.name,
 // getReaciveNameFromParent: () => this.name
 // },
 components: {
  Child
 }
}
</script>

Child組件

<template>
 <div class="child-container">
  Child組件
  <br/>
  <GrandSon />
 </div>
</template>
<style scoped>
 .child-container {
  padding: 30px;
  border: 1px solid burlywood;
 }
</style>
<script>
import GrandSon from './GrandSon'
export default {
 components: {
  GrandSon
 }
}
</script>

GrandSon組件:

<template>
 <div class="grandson-container">
  Grandson組件
  <br/>
  {{nameFromParent}}
  <br/>
  {{reactiveNameFromParent}}
 </div>
</template>
<style scoped>
 .grandson-container {
  padding: 30px;
  border: 1px solid burlywood;
 }
</style>
<script>
export default {
 inject: ['nameFromParent', 'getReaciveNameFromParent'],
 computed: {
  reactiveNameFromParent () {
   return this.getReaciveNameFromParent()
  }
 },
 watch: {
  'reactiveNameFromParent': function (val) {
   console.log('來自Parent組件的name值發生了變化', val)
  }
 },
 mounted () {
  console.log(this.nameFromParent, 'nameFromParent')
 }
}
</script>

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Vue.js中provide/inject如何實現響應式數據更新”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!

名稱欄目:Vue.js中provide/inject如何實現響應式數據更新-創新互聯
鏈接地址:http://vcdvsql.cn/article22/ceoccc.html

成都網站建設公司_創新互聯,為您提供服務器托管靜態網站網站策劃網站內鏈域名注冊手機網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化