vue2.0/3.0中provide和inject的用法示例
1、provide/inject有什么用?
常用的父子組件通信方式都是父組件綁定要傳遞給子組件的數據,子組件通過props屬性接收,一旦組件層級變多時,采用這種方式一級一級傳遞值非常麻煩,而且代碼可讀性不高,不便后期維護。
vue提供了provide和inject幫助我們解決多層次嵌套嵌套通信問題。在provide中指定要傳遞給子孫組件的數據,子孫組件通過inject注入祖父組件傳遞過來的數據。
使用場景:由于vue有$parent屬性可以讓子組件訪問父組件。但孫組件想要訪問祖先組件就比較困難。通過provide/inject可以輕松實現跨級訪問祖先組件的數據
2、provide/inject使用方式
provide:是一個對象 / 返回對象的函數。
里面是屬性和屬性值。
注意:子孫層的provide會掩蓋祖父層provide中相同key的屬性值
inject:一個字符串數組,或者是一個對象。
屬性值可以是一個對象,包含from和default默認值,from是在可用的注入內容中搜索用的 key (字符串或 Symbol),意思就是祖父多層provide提供了很多數據,from屬性指定取哪一個key;
default指定默認值。
具體用法:
父組件
<template> <div> </div> </template> <script> export default { components: { MergeTipDialog, BreakNetTip }, data () { return { isShow: false, isRouterAlive: true }, // 父組件中返回要傳給下級的數據 可以使函數,也可以是data中的數據 provide () { return { reload: this.reload isShow:this.isShow } }, methods: { reload () { this.isRouterAlive = false this.$nextTick(() => { this.isRouterAlive = true }) } } } </script>
子孫
<template> <popup-assign :id="id" @success="successHandle" > <div class="confirm-d-tit"><span class="gray-small-btn">{{ name }}</span></div> <strong>將被分配給</strong> <a slot="reference" class="unite-btn" > 指派 </a> </popup-assign> </template> <script> import PopupAssign from '../PopupAssign' export default { //引用vue reload方法 內容 isShow inject: ['reload','isShow'], components: { PopupAssign }, methods: { async successHandle () { this.reload() } } } </script>
vue3.0用法
父組件
子組件
總結
到此這篇關于vue2.0/3.0中provide和inject用法的文章就介紹到這了,更多相關vue中provide和inject用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue-cli3項目配置eslint代碼規(guī)范的完整步驟
這篇文章主要給大家介紹了關于vue-cli3項目配置eslint代碼規(guī)范的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09Vue實現調節(jié)窗口大小時觸發(fā)事件動態(tài)調節(jié)更新組件尺寸的方法
今天小編就為大家分享一篇Vue實現調節(jié)窗口大小時觸發(fā)事件動態(tài)調節(jié)更新組件尺寸的方法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09