" />

亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

在這里插入圖片描述

但是也會出現問題:

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

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

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

<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的   此時的this只想script內的作用域   this為undefined*/
    /*provide:{
			this.names,
    }*/
  //  應該這樣寫
    provide(){
    	return {
    		names:this.names
      }
    }
	}
</script>
<style scoped>
</style>

像上面這樣寫,雖然可以拿到this指向的實例下的數據,但是如何讓它們形成依賴關系,實現響應式呢?對此我們需要對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的   此時的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>

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • 分離vue文件中css、js代碼的簡單技巧

    分離vue文件中css、js代碼的簡單技巧

    這篇文章主要給大家介紹了關于分離vue文件中css、js代碼的簡單技巧,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03
  • 基于vue中的scoped坑點解說

    基于vue中的scoped坑點解說

    這篇文章主要介紹了基于vue中的scoped坑點解說,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue3中獲取dom元素和操作實現方法

    vue3中獲取dom元素和操作實現方法

    ref是Vue3中一個非常重要的功能,它可以用來獲取DOM節(jié)點,從而實現對DOM節(jié)點的操作,下面這篇文章主要給大家介紹了關于vue3中獲取dom元素和操作實現的相關資料,需要的朋友可以參考下
    2023-06-06
  • 解決運行vue項目內存溢出問題

    解決運行vue項目內存溢出問題

    這篇文章主要介紹了解決運行vue項目內存溢出問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 基于Vue3實現旋轉木馬動畫效果

    基于Vue3實現旋轉木馬動畫效果

    這篇文章主要為大家介紹了如何利用Vue3實現旋轉木馬的動畫效果,文中的示例代碼講解詳細,對我們學習Vue有一定的幫助,需要的可以參考一下
    2022-05-05
  • 解決vue-cli3創(chuàng)建使用iview定制主題javascriptEnabled找不到該配置項

    解決vue-cli3創(chuàng)建使用iview定制主題javascriptEnabled找不到該配置項

    這篇文章主要介紹了解決vue-cli3創(chuàng)建使用iview定制主題javascriptEnabled找不到該配置項問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue中對組件二開解決思路以及方案

    Vue中對組件二開解決思路以及方案

    這篇文章主要介紹了Vue中對組件二開解決思路以及方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-04-04
  • Vue中使用localStorage存儲token并設置時效

    Vue中使用localStorage存儲token并設置時效

    這篇文章主要為大家介紹了Vue中使用localStorage存儲token并設置時效,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 解決vue2中使用elementUi打包報錯的問題

    解決vue2中使用elementUi打包報錯的問題

    這篇文章主要介紹了解決vue2中使用elementUi打包報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue實現菜單權限控制的示例代碼

    vue實現菜單權限控制的示例代碼

    這篇文章主要介紹了vue實現菜單權限控制的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論