91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue3中非父子組件如何傳值

發布時間:2021-12-28 10:36:08 來源:億速云 閱讀:145 作者:小新 欄目:開發技術

小編給大家分享一下vue3中非父子組件如何傳值,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

vue2中非父子組件的傳值主要是通過事件總線,創建一個vue實例,通過在不同的組件中導入該實例來實現非父子組件之間的通信行為。
vue3提供了**provide**和**inject**屬性,可以實現非父子組件之間的通信;
假設有三個組件:App.vue(父級)、sub1(子級)、sub2(子級的子級):

App.vue

<template>
  <div >
    <h2>我是你爹</h2>
    <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>
  <h3>我是一級子組件</h3>
  <span>????</span>
  <sub2/>
</template>
<script>
  import sub2 from "./sub2";
	export default {
		name: "sub1",
    components:{
			sub2,
    }
	}
</script>
<style scoped>
</style>

sub2.vue

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

實現效果如下,可以看到是可以正常獲取頂級組件中傳遞的值:

vue3中非父子組件如何傳值

但是也會出現問題:

就是頂級組件要傳遞的值變化時,如何讓它實現響應式呢?

如何在provide屬性中通過this獲取當前的實例呢?

這里就需要將provide屬性書寫為方法的形式,返回一個數組或者對象:

<template>
  <div >
    <h2>我是你爹</h2>
    <span>????</span>
    <sub1/>
  </div>
</template>
<script>
  import sub1 from './sub1'
	export default {
		name: "App",
    data(){
			return {
				names:['peanut','javascriptKing']
      }
    },
    components:{
			sub1,
    },
    /*這樣寫是拿不到this的   此時的this只想script內的作用域   this為undefined*/
    /*provide:{
			this.names,
    }*/
  //  應該這樣寫
    provide(){
    	return {
    		names:this.names
      }
    }
	}
</script>
<style scoped>
</style>

像上面這樣寫,雖然可以拿到this指向的實例下的數據,但是如何讓它們形成依賴關系,實現響應式呢?對此我們需要對App.vue做如下的修改:

<template>
  <div >
    <h2>我是你爹</h2>
    <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的   此時的this只想script內的作用域   this為undefined*/
    /*provide:{
			this.names,
    }*/
  //  應該這樣寫
    provide(){
    	return {
    		names:computed(() =>{ this.names.length }) // 使用計算屬性返回該變量   使得names與data中的names形成依賴關系
      }
    },
    mounted() {
    	setInterval(()=>{
    		this.names.push('vue大王!')
      },1000)
    }
	}
</script>
<style scoped>
</style>

看完了這篇文章,相信你對“vue3中非父子組件如何傳值”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

顺昌县| 德州市| 柳林县| 呼和浩特市| 乃东县| 辽阳县| 石狮市| 中方县| 资兴市| 万山特区| 哈密市| 曲麻莱县| 琼海市| 邵武市| 盱眙县| 司法| 区。| 佛山市| 通化市| 乐都县| 平远县| 健康| 噶尔县| 抚顺县| 蓬溪县| 利辛县| 福泉市| 大安市| 佛冈县| 申扎县| 保亭| 漠河县| 浮山县| 绥芬河市| 来凤县| 宁南县| 白朗县| 兴业县| 信阳市| 乐昌市| 福州市|