" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解vue3中的非父子組件傳值

 更新時(shí)間:2021年12月28日 08:43:05   作者:高級(jí)白嫖工程師  
這篇文章主要為大家介紹了vue3中的非父子組件傳值,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
vue2中非父子組件的傳值主要是通過事件總線,創(chuàng)建一個(gè)vue實(shí)例,通過在不同的組件中導(dǎo)入該實(shí)例來(lái)實(shí)現(xiàn)非父子組件之間的通信行為。
vue3提供了**provide**和**inject**屬性,可以實(shí)現(xiàn)非父子組件之間的通信;
假設(shè)有三個(gè)組件:App.vue(父級(jí))、sub1(子級(jí))、sub2(子級(jí)的子級(jí)):

App.vue

<template>
  <div style="border: 1px solid pink">
    <h1>我是你爹</h1>
    <span>??</span>
    <sub1/>
  </div>
</template>
<script>
  import sub1 from './sub1'
	export default {
		name: "App",
    components:{
			sub1,
    },
    provide:{ // 通過在父組件中定義provide   聲明要傳遞的值
			names:['peanut','javascriptKing']
    }
	}
</script>
<style scoped>
</style>

sub1.vue

<template>
  <h2>我是一級(jí)子組件</h2>
  <span>??</span>
  <sub2/>
</template>
<script>
  import sub2 from "./sub2";
	export default {
		name: "sub1",
    components:{
			sub2,
    }
	}
</script>
<style scoped>
</style>

sub2.vue

<template>
  <h3>我是最小的,也就是孫子</h3>
  <div>我引用了頂級(jí)組件的names數(shù)組 ===> {{names}}</div>
</template>
<script>
	export default {
		name: "sub2",
    // 通過inject  在子組件中接受某一個(gè)跨級(jí)傳遞的值
    inject:['names'],
	}
</script>
<style scoped>
</style>

實(shí)現(xiàn)效果如下,可以看到是可以正常獲取頂級(jí)組件中傳遞的值:

在這里插入圖片描述

但是也會(huì)出現(xiàn)問題:

就是頂級(jí)組件要傳遞的值變化時(shí),如何讓它實(shí)現(xiàn)響應(yīng)式呢?

如何在provide屬性中通過this獲取當(dāng)前的實(shí)例呢?

這里就需要將provide屬性書寫為方法的形式,返回一個(gè)數(shù)組或者對(duì)象:

<template>
  <div style="border: 1px solid pink">
    <h1>我是你爹</h1>
    <span>??</span>
    <sub1/>
  </div>
</template>
<script>
  import sub1 from './sub1'
	export default {
		name: "App",
    data(){
			return {
				names:['peanut','javascriptKing']
      }
    },
    components:{
			sub1,
    },
    /*這樣寫是拿不到this的   此時(shí)的this只想script內(nèi)的作用域   this為undefined*/
    /*provide:{
			this.names,
    }*/
  //  應(yīng)該這樣寫
    provide(){
    	return {
    		names:this.names
      }
    }
	}
</script>
<style scoped>
</style>

像上面這樣寫,雖然可以拿到this指向的實(shí)例下的數(shù)據(jù),但是如何讓它們形成依賴關(guān)系,實(shí)現(xiàn)響應(yīng)式呢?對(duì)此我們需要對(duì)App.vue做如下的修改:

<template>
  <div style="border: 1px solid pink">
    <h1>我是你爹</h1>
    <span>??</span>
    <sub1/>
  </div>
</template>
<script>
  import sub1 from './sub1'
  import { computed } from 'vue'
	export default {
		name: "App",
    data(){
			return {
				names:['peanut','javascriptKing']
      }
    },
    components:{
			sub1,
    },
    /*這樣寫是拿不到this的   此時(shí)的this只想script內(nèi)的作用域   this為undefined*/
    /*provide:{
			this.names,
    }*/
  //  應(yīng)該這樣寫
    provide(){
    	return {
    		names:computed(() =>{ this.names.length }) // 使用計(jì)算屬性返回該變量   使得names與data中的names形成依賴關(guān)系
      }
    },
    mounted() {
    	setInterval(()=>{
    		this.names.push('vue大王!')
      },1000)
    }
	}
</script>
<style scoped>
</style>

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 關(guān)于Vue3中的響應(yīng)式原理

    關(guān)于Vue3中的響應(yīng)式原理

    這篇文章主要介紹了關(guān)于Vue3中的響應(yīng)式原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Bpmn.js?自定義描述文件使用說(shuō)明

    Bpmn.js?自定義描述文件使用說(shuō)明

    這篇文章主要為大家介紹了Bpmn.js?自定義描述文件使用說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • vue3實(shí)戰(zhàn)-子組件之間相互傳值問題

    vue3實(shí)戰(zhàn)-子組件之間相互傳值問題

    這篇文章主要介紹了vue3實(shí)戰(zhàn)-子組件之間相互傳值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue.js 中使用(...)運(yùn)算符報(bào)錯(cuò)的解決方法

    vue.js 中使用(...)運(yùn)算符報(bào)錯(cuò)的解決方法

    這篇文章主要介紹了vue.js 中使用(...)運(yùn)算符報(bào)錯(cuò)的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-08-08
  • vue3中實(shí)現(xiàn)圖片壓縮的示例代碼

    vue3中實(shí)現(xiàn)圖片壓縮的示例代碼

    圖片壓縮是一種比較便捷的壓縮方式,本文主要介紹了vue3中實(shí)現(xiàn)圖片壓縮的示例代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • vue中拆分組件的實(shí)戰(zhàn)案例

    vue中拆分組件的實(shí)戰(zhàn)案例

    最近在學(xué)vue,試著寫個(gè)單頁(yè)應(yīng)用,在寫組件,拆分組件時(shí)遇到一些困惑,下面這篇文章主要給大家介紹了關(guān)于vue中拆分組件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • vue.js input框之間賦值方法

    vue.js input框之間賦值方法

    今天小編就為大家分享一篇vue.js input框之間賦值方法具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-08-08
  • 詳解vue-resource promise兼容性問題

    詳解vue-resource promise兼容性問題

    這篇文章主要介紹了詳解vue-resource promise兼容性問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Vue Camera組件功能及常用使用方法

    Vue Camera組件功能及常用使用方法

    Vue Camera組件是一個(gè)用于在Web應(yīng)用中使用攝像頭的Vue插件,它提供了一些常見的功能和方法來(lái)控制攝像頭和捕獲圖像或視頻數(shù)據(jù),本文給大家介紹Vue Camera組件的常見功能和使用方法,感興趣的朋友一起看看吧
    2023-11-11
  • vue自定義組件如何添加使用原生事件

    vue自定義組件如何添加使用原生事件

    這篇文章主要介紹了vue自定義組件如何添加使用原生事件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

韩城市| 安顺市| 洛宁县| 秦安县| 贵德县| 太仓市| 肇州县| 宁城县| 旅游| 南京市| 眉山市| 凌云县| 广西| 绥滨县| 军事| 正宁县| 墨脱县| 白水县| 佛冈县| 磐安县| 绥化市| 东台市| 阿荣旗| 马关县| 德格县| 新沂市| 会泽县| 东兴市| 文安县| 蒙山县| 晋城| 三穗县| 专栏| 涡阳县| 南投县| 永康市| 东兰县| 呈贡县| 乐清市| 昂仁县| 昭平县|