日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

vue 解決兄弟組件、跨組件深層次的通信操作

瀏覽:170日期:2022-12-26 15:14:57

兄弟組件之間的通信同樣是在項目中經(jīng)常會遇到的組件間的通信問題之一, 這種問題的最根本方法就是: 把兄弟組件內(nèi)部的變量提升到一個中央倉庫。

借助父級組件鏈式交互

使子組件1 通過 $emit 通知父級, 父級再通過響應(yīng) 子組件1 的事件去觸發(fā)子組件2的事件,這樣的鏈式操作,在子組件不多的時候,但是一個不錯的解決方法

子組件1

<template> <div> <p @click='$emit(’fromFirst’,’來自A組件’)'>first組件</p> </div></template><script> export default { name: ’first’ }</script>

子組件2

<template> 子組件2 <div>{{secondInfo}}</div></template><script>export default { name: ’second’, data() { return { this.secondInfo: null } }, created(){ this.$on(’fromFather’, (info) => { this.secondInfo = info }) }}</script>

父組件

<template> <first @fromFirst=’handleFromFirst’ /> <second ref=’second’ /> </template><script>import First from ’./first’import Scond from ’./second’export default { components: {First, Second}, data() { return { this.secondInfo: null } }, methods:{ handleFromFirst(val) { let second = this.$refs.second second.$emit(’fromFather’, val) } }}</script>

子組件1 觸發(fā)父組件的 fromFirst 事件, 在事件中又觸發(fā)了子組件2的 fromFather事件,并將從子組件1 傳遞過來的參數(shù)傳遞給了該事件, 當子組件2 執(zhí)行該事件的時候,將內(nèi)部的 secondInfo 改變。這就實現(xiàn)了一個兄弟組件的交互。

這個方式在 react 里面同樣也是適用的, 但是如果父組件內(nèi)包含了多個子組件并包含了復(fù)雜的邏輯, 有沒有更好的方式來解決這種方式呢。

大部分第一個想到的是 vuex, 當然這在一個業(yè)務(wù)邏輯、數(shù)據(jù)復(fù)雜的項目中是一個很好的解決方法, 但是想象我們要編寫一個通用組件,這個組件可能被用到不同的項目中來, 如果使用 vuex 這就要求每一個使用這個組件的項目中都要使用 vuex, 這顯然是不好的。

借助中間文件,充當中央倉庫

還好 ES6 的模塊機制天然就支持建立一個中央倉庫, 當 A 文件使用 import value from ’./b.js’ 來引用 B 文件里面的 value 的時候, 這時就會賦值給 A 文件一個 B 文件的 value 的 只讀引用, 當 B 文件里面的 value 的值發(fā)生變化的時候, A 文件里面的 value 也會跟著改變。

// lib.jsexport let counter = 3;export function incCounter() {counter++;}// main.jsimport { counter, incCounter } from ’./lib’;console.log(counter); // 3incCounter();console.log(counter); // 4

定義一個額外的實例進行一個事件的中轉(zhuǎn),對于ES6 模塊的運行機制已經(jīng)有了一個講解,當模塊內(nèi)部發(fā)生變化的時候,引入模塊的部分同樣會發(fā)生變化,當又一個額外的實例對加載機制進行引入進行emit與emit與emit與on進行綁定通信,能輕而易舉解決問題,通過b->a->c的模式直接過渡。

解決 vue 兄弟組件之間的通信我們同樣也可以使用中央倉庫的方式來實現(xiàn)。

// store.js 作為中央倉庫import Vue from ’vue’export default new Vue()

通過 new 一個 vue 的實例當作兄弟組件交互的中央倉庫。

父級組件

<template> <first/> <second/> </template><script>import First from ’./first’import Scond from ’./second’export default { components: {First, Second}}</script>

父組件只是引入子組件, 不再作為中央倉庫來過渡交互。

子組件1

<template> <div @click=’hanleClick’>子組件1</div></template><script>import Store from ’./store’export default { name: ’first’, methods: { handleClick() { Store.$emit(’fromFirst’, ’來自子組件1的傳值’) } }}</script>

因為我們的目的就是把 Store 作為一個中央倉庫,這里我們把 fromFirst 事件添加到了 Store 上面而不是當前組件 this 上。

子組件2

<template> 子組件2 <div>{{secondInfo}}</div></template><script>import Store from ’./store’export default { name: ’second’, data() { return { this.secondInfo: null } }, created(){ Store.$on(’fromFirst’, (info) => { this.secondInfo = info }) }}</script>

子組件2 里面同樣也是使用 Store 實例來監(jiān)聽 fromFirst 事件, 因為子組件1和子組件2里面添加事件和監(jiān)聽事件的是同一個實例,根據(jù)我們在上文中分析的 ES6 中的情況, 當 Store 添加了 fromFirst 這個時間之后, Store實例的 $on 就可以監(jiān)聽到這個事件并執(zhí)行回調(diào)。

跨組件深層次交互

上面講的組件之間的關(guān)系是這樣的:

vue 解決兄弟組件、跨組件深層次的通信操作

我們可以實現(xiàn) 子組件之間的交互, 但是如果我們遇到這種情況呢?

vue 解決兄弟組件、跨組件深層次的通信操作

孫組件需要跟子組件3 進行交互,還是使用上述的方法可以做到嗎? 答案是肯定的,只要能夠使用同一個中央倉庫,那么不管什么層級的組件復(fù)雜度,都是可以實現(xiàn)兩者的交互的。

補充知識:Vue組件跨層級通信

正常組件間通信

父->子組件 是通過屬性傳遞

子->父組件 是通過this.$emit()傳遞

this.$emit()返回的是this,如果需要一些值 可使用callback方式傳遞

provide 和 inject

這對選項需要一起使用,以允許一個祖先組件向其所有子孫后代注入一個依賴,

不論組件層次有多深,并在起上下游關(guān)系成立的時間里始終生效。

provide 和 inject 綁定并不是可響應(yīng)的。這是刻意為之的。

然而,如果你傳入了一個可監(jiān)聽的對象,那么其對象的屬性還是可響應(yīng)的。

provide提供數(shù)據(jù),多層子組件 向上層尋找,只要找到 就不在向上層尋找了.

inject 向子組件注入數(shù)據(jù)

使用方式

第一種方式(傳遞對象,使用字符串數(shù)組接收)

// 父級組件提供 ’foo’var Provider = { provide: { foo: ’bar’ }, // ...}// 子組件注入 ’foo’var Child = { inject: [’foo’], created () { console.log(this.foo) // => 'bar' } // ...}

第二種方式(傳遞返回對象的函數(shù), 使用對象接收)

provide() { return { // 2.6.0 版本之前 通常傳遞this. 但這樣的話 會傳遞很多用不到的屬性 theme: { color: ’xxx’ //如果傳入可響應(yīng)的數(shù)據(jù),這里的屬性還是可響應(yīng)的 } };}inject: { //這里可以換成其它名字 theme: { from: 'theme', // 數(shù)據(jù)來源 default: () => ({}) //降級情況下使用的 value //可以是 普通值 //可以是 對非原始值使用一個工廠方法 }}//正常子組件this.theme //即可訪問//子組件是函數(shù)式組件的使用方式injections.theme.color

Vue.observable( object )

讓一個對象可響應(yīng)。Vue 內(nèi)部會用它來處理 data 函數(shù)返回的對象。

可以作為最小化的跨組件狀態(tài)存儲器,用于簡單的場景

提供數(shù)據(jù)可改為

provide() { //這時提供的theme 則為可響應(yīng)的數(shù)據(jù) this.theme = Vue.observable({ color: 'blue' }); return { theme: this.theme };},

以上這篇vue 解決兄弟組件、跨組件深層次的通信操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
图片区亚洲欧美小说区| 日韩精品一区二区三区中文| 欧美另类中文字幕| 丝袜脚交一区二区| 亚洲少妇在线| 亚洲免费高清| 石原莉奈在线亚洲二区| 蜜臀久久久久久久| 蜜臀精品久久久久久蜜臀| 国产麻豆综合| 中文字幕日韩高清在线| 在线看片日韩| 亚洲欧美在线专区| 欧美片第1页综合| 国产精品天堂蜜av在线播放| 午夜精品福利影院| 国产欧美日韩在线观看视频 | 国产伦精品一区二区三区视频| 亚洲影视一区| 亚洲精品黄色| 久久精品97| 精品一区二区三区亚洲| 欧美激情综合| 亚洲三级欧美| 欧美日韩国产一区二区三区不卡| 妖精视频成人观看www| 亚洲不卡视频| 国产精品2区| 啪啪国产精品| 99香蕉国产精品偷在线观看| 日本在线成人| 国产videos久久| 亚洲黄页一区| 日韩国产欧美在线视频| 国产成人免费av一区二区午夜| 国产一区视频在线观看免费| 亚洲欧美日本国产| 精品午夜视频| 91久久久久| 欧美日韩夜夜| av一区在线| 日本精品国产| 欧美freesex黑人又粗又大| 日韩一级网站| 日韩精品欧美大片| 日韩欧美在线中字| 亚洲+小说+欧美+激情+另类| 精品国产a一区二区三区v免费| 国产在线不卡| 国产精品一页| 婷婷综合在线| 国产激情久久| 国产美女精品| 国产精品精品| 一区二区电影| av在线最新| 日韩精品一区二区三区中文字幕| 中文字幕人成乱码在线观看| 亚洲日本欧美| 日本欧美国产| 午夜视频一区二区在线观看| 国产欧美一区二区三区精品酒店| 蜜臀91精品一区二区三区| 色婷婷综合网| 日韩va亚洲va欧美va久久| 久久国产小视频| 国产精品一级在线观看| 亚洲一区二区成人| 国产夫妻在线| 欧美日韩精品一区二区三区在线观看| 久久亚洲精品中文字幕蜜潮电影| 国产精区一区二区| 久久成人国产| 蜜桃av.网站在线观看| 日韩一区免费| 亚洲性色视频| 久久亚洲黄色| 日韩中文字幕视频网| 国产综合婷婷| 欧美激情一区| 婷婷综合电影| 国产视频一区在线观看一区免费| 高清av一区| 国产免费av一区二区三区| 蜜桃久久久久久久| 99久久亚洲精品蜜臀| 精品久久国产一区| 国产日韩欧美高清免费| 中文视频一区| 激情欧美一区| 在线手机中文字幕| 久久一区视频| 国产精品色在线网站| 亚洲精品美女91| 香蕉久久久久久久av网站| 91精品国产91久久久久久黑人| 老司机精品视频网| 欧美日韩一区二区三区不卡视频| 日韩精品一二三区| 91成人精品| 九九久久电影| 天堂日韩电影| 伊人久久在线| 日韩a一区二区| 麻豆精品国产91久久久久久| 欧美午夜网站| 日韩高清电影免费| 四虎在线精品| 亚洲三区欧美一区国产二区| 久久国产精品久久久久久电车| 欧美美女一区| 黑丝美女一区二区| 久久精品国产大片免费观看| 美女网站视频一区| 蜜桃精品在线| 999国产精品视频| 国产超碰精品| 91精品一区国产高清在线gif| 日韩电影免费在线观看| 久久久久亚洲精品中文字幕| 国产精品v日韩精品v欧美精品网站 | 夜夜嗨网站十八久久| 九色porny丨国产首页在线| a日韩av网址| 中文字幕人成乱码在线观看| 成人在线免费观看91| 国产一区一一区高清不卡| 精品一二三区| 黄色欧美在线| 国产美女高潮在线| 福利欧美精品在线| 国产中文字幕一区二区三区| 高清一区二区| 久久久久99| 亚洲一级网站| 中文欧美日韩| 亚洲精品成a人ⅴ香蕉片| 日韩精品视频在线看| 国产欧美一区二区色老头| 美女精品一区二区| 伊伊综合在线| 欧美特黄一区| 亚洲69av| 你懂的亚洲视频| 久久影院午夜精品| 激情婷婷欧美| 国产v日韩v欧美v| 一区二区精品伦理...| 久久久噜噜噜| 久久午夜影视| 国产美女精品视频免费播放软件| 青青伊人久久| 久久一区精品| 欧美日韩一区二区综合| 亚洲中字黄色| 国产亚洲观看| 午夜av不卡| 美女国产精品| 国产欧美日韩精品一区二区三区| 嫩草伊人久久精品少妇av杨幂| 色乱码一区二区三区网站| 日韩中文首页| 午夜一级在线看亚洲| 日韩精品亚洲一区二区三区免费| 国产极品模特精品一二| 波多视频一区| 三级欧美韩日大片在线看| 国产伦理一区| 日韩免费一区| 亚洲日产av中文字幕| 精品一区二区男人吃奶| 亚洲精品网址| 国产免费久久| 日韩精品欧美激情一区二区| 中文字幕免费一区二区| 精品成人18| 宅男在线一区| 奇米777国产一区国产二区| 在线天堂中文资源最新版| 人人爽香蕉精品| 精品国产亚洲一区二区三区大结局| 九九久久电影| 国产精品亚洲欧美一级在线| 久久青草久久| 欧美亚洲三级| 午夜精品一区二区三区国产| 日本午夜精品久久久| 亚洲www免费| 天堂俺去俺来也www久久婷婷| 日韩a一区二区| 亚洲香蕉久久| 国产 日韩 欧美 综合 一区| 乱人伦精品视频在线观看| 老司机免费视频一区二区| av不卡在线| 97人人精品| 青青在线精品| 在线视频精品| 在线手机中文字幕| 日本va欧美va瓶|