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

您的位置:首頁技術文章
文章詳情頁

詳解vue組件之間的通信

瀏覽:185日期:2022-12-02 18:30:39

說明:下面我總結了比較常用的vue組件之前通信的方式,最近準備面試,所以有些總結貼上來分享

props和$emit

只有父子關系才可以用這種方式,父組件向子組件傳遞參數用props,子向父傳遞使用觸發$emit自定義事件

1.props

<!-- parent.vue, 可以傳遞`靜態`的props和`動態`的props, 靜態的參數只能是個String類型的,如果是其他類型的一定要記得加`:`來表示這是一個 js 表達式而不是一個字符串 --><Child :name='name' :age='18' address='xxxxx'></Child>...data () { return { name: ’marry’ }}<!-- 傳一個參數所有props, 雖然目前我沒有這個需求,使用不帶參數的 v-bind --><blog-post v-bind='post'></blog-post>post: { id: 1, title: ’My Journey with Vue’}//等價于下面<blog-post v-bind: v-bind:title='post.title'></blog-post><!-- child.vue -->...//以字符串數組形式列出的 propprops: [’name’, ’age’, ’address’]//prop驗證, 當 prop 驗證失敗的時候,(開發環境構建版本的) Vue 將會產生一個控制臺的警告//注意:以下類型不能寫成’String’這種帶引號的形式props: { // 基礎的類型檢查 (`null` 和 `undefined` 會通過任何類型驗證) propA: Number, // 多個可能的類型 propB: [String, Number], // 必填的字符串 propC: { type: String, required: true }, // 帶有默認值的數字 propD: { type: Number, default: 100 }, // 帶有默認值的對象 propE: { type: Object, // 對象或數組默認值必須從一個工廠函數獲取 default: function () { return { message: ’hello’ } } }, // 自定義驗證函數 propF: { validator: function (value) { // 這個值必須匹配下列字符串中的一個 return [’success’, ’warning’, ’danger’].indexOf(value) !== -1 } }}//注意那些 prop 會在一個組件實例創建之前進行驗證,所以實例的 property (如 data、computed 等) 在 default 或 validator 函數中是不可用的。

2.$emit

<!-- parent.vue --><Child @my-event='myEvent'></Child>...methods: { myEvent(name){ this.name = name }}<!-- child.vue --><div> <button @click='$emit(’my-event’, name)'></button></div>//使用自定義事件將子組件的值拋給父組件

中央事件總線 bus

用于解決跨級和兄弟組件通信問題,巧妙的使用一個公共的vue實例,利用$on, $emit, $off(移除自定義事件監聽器)

方法一:

可以在main.js中,在Vue的原型上掛載一個公共的Vue實例 $bus,這樣全局任何一個地方都可以使用

Vue.prototype.$bus = new Vue()

然后在需要的地方注冊自定義事件和接收參數的回調函數

this.$bus.$on(’changeName’, name => { this.name = name})

在需要改變的時候觸發事件并拋出參數

this.$bus.$emit(’changeName’, ’wzj’)

方法二:

定義一個util.js文件

import Vue from ’vue’const bus = new Vue()export default bus

在需要用到bus的文件中引入

import bus from ’../util’ //文件路徑不一定//在一個文件定義事件bus.$on(’changeName’, name => { this.name = name})//另一個文件拋出參數bus.$emit(’changeName’, ’wzj’)

vuex

對于項目比較復雜,多組件共享狀態,不同層級需要通信

詳解vue組件之間的通信

核心概念:

state, getter, mutation, action, module

//store/index.jsimport Vue from ’vue’import Vuex from ’vuex’Vue.use(Vuex)export dafault new Vuex.Store({ state: { name: ’’, age: 0 }, getters: { tranName(state){ return ’name: ’ + state.name } }, mutations: { changeName(state, name){ state.name = name } }, /*Action 函數接受一個與 store 實例具有相同方法和屬性的 context 對象,因此你可以調用 context.commit 提交一個 mutation,或者通過 context.state 和 context.getters 來獲取 state 和 getters */ actions: { //異步函數,但還是要通過提交commit觸發mutations函數操作state changeName(context, name){ context.commit(’changeName’, name) } }, modules: {}})

在組件中使用

方法一:

//訪問state屬性this.$store.state.name//訪問getters屬性this.$store.getters.tranName//訪問mutationsthis.$store.commit(’changeName’, ’wzj’)//訪問actionsthis.$store.dispatch(’changeName’, ’wzj’)

方法二:使用輔助函數映射到本地,這里只列舉了簡便的方式,更多查閱官網吧

import {mapState, mapGetters, mapMutations, mapActions} from ’vuex’//state 和 getters 映射到本地的computed屬性中,作為計算屬性使用computed: { ...mapState([’name’, ’age’]), ...mapGetters([’tranName’])}//mutations 和 actionsmethods: { // 將 `this.changeName()` 映射為 `this.$store.commit(’changeName’)` ...mapMutations([’changeName’]) // 將 `this.changeName()` 映射為 `this.$store.dispatch(’changeName’)` ...mapActions([’changeName’])}

$attrs 和 $listeners

父組件與后代組件,用以上方法有點大材小用或者第一種有些不方便

$attrs 包含了父作用域中不作為 prop 被識別 (且獲取) 的 attribute 綁定 ( class 和 style 除外)。當一個組件沒有聲明任何 prop 時,這里會包含所有父作用域的綁定 ( class 和 style 除外),并且可以通過 v-bind='$attrs' 傳入內部組件。 $listeners 包含了父作用域中的 (不含 .native 修飾器的) v-on 事件監聽器。它可以通過 v-on='$listeners' 傳入內部組件——在創建更高層次的組件時非常有用。

例子:

//app.vue<div> <One name='wzj' :age='age' address='xian' @changeAge='changeAge'></One></div>...data(){ return { age: 10 }},methods: { changeAge(age){ this.age = age }}//one.vue<div> <div>姓名:{{ name }}</div> <div>年齡:{{ age }}</div> <Two v-bind='$attrs' v-on='$listeners'></Two> <button @click='change'>點我2</button></div>...props: [’name’, ’age’],//two.vue<div> <div>{{ address }}</div> <button @click='change'>點我2</button></div>...props: [’address’], //用$attrs傳遞到最后的屬性,在使用的時候還是要聲明propsmethods: { change(){ this.$emit(’changeAge’, 30) }}

理解:其實祖先組件的屬性和事件還是一層層往下傳,不過用$attrs 和 $listeners優化和簡便了傳遞過程中書寫,而且在傳遞的過程中,任何一個聲明了 $listeners的組件都可以觸發里面的所有事件,而聲明了$attrs的組件只能使用之前未用props聲明的剩下的屬性。

以上就是vue組件之間的通信的詳細內容,更多關于vue 組件通信的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产v综合v| 国产精品主播| 欧美精品二区| 免费在线观看视频一区| 粉嫩av一区二区三区四区五区| 日韩在线观看中文字幕| 国产精品日韩| 亚洲女同中文字幕| 99热免费精品| 欧美日韩激情| 91精品一区二区三区综合在线爱| 国产欧洲在线| 国产成人在线中文字幕| 国产日韩三级| 免费一级片91| 男女性色大片免费观看一区二区| 在线国产一区二区| 999久久久国产精品| 日韩在线精品| 日本激情一区| 国产一区二区三区亚洲综合| 精品国产一区二区三区噜噜噜| 国产视频一区二区在线播放| 日韩一区二区三区在线看| 亚洲资源av| 亚洲色图网站| 国产一区二区高清| 亚洲一区日本| 91福利精品在线观看| 亚洲深夜影院| 99久久亚洲精品蜜臀| 久久人人97超碰国产公开结果| 日韩久久精品网| 国产欧美日韩精品一区二区三区| 亚洲啊v在线| 美腿丝袜在线亚洲一区| 日本成人在线一区| 国产精品扒开腿做爽爽爽软件| 日本不卡在线视频| 久久国产精品色av免费看| 久久精品亚洲一区二区| 国产一区二区三区久久| 成人美女视频| 69堂精品视频在线播放| 亚洲久久视频| 亚洲精品少妇| 国产免费久久| 久久精品主播| 欧美综合二区| 日韩国产在线观看| 成人影视亚洲图片在线| 99久久亚洲精品蜜臀| 亚洲欧美日韩国产一区| 久久精品72免费观看| 国产精品观看| 中国字幕a在线看韩国电影| 九九99久久精品在免费线bt| 神马日本精品| 视频一区二区三区在线| 欧美aa在线观看| 视频一区视频二区中文| 国产精品亚洲一区二区在线观看| 美女在线视频一区| 久久国产精品成人免费观看的软件| 亚洲激情不卡| 亚洲欧美在线综合| 超碰在线99| 夜久久久久久| 国产毛片一区二区三区| 亚洲v在线看| 日韩专区视频网站| 精品中文在线| 亚洲精品高潮| 国产在线不卡一区二区三区| 久久影院午夜精品| 日本精品久久| 四虎国产精品免费观看| 麻豆精品网站| 日本中文字幕不卡| 久久在线电影| 91精品啪在线观看国产爱臀| 久久精品亚洲| 美国三级日本三级久久99| 麻豆一区二区三区| jiujiure精品视频播放| 麻豆一区二区99久久久久| 亚洲h色精品| 日韩在线视频一区二区三区| 欧美国产偷国产精品三区| 亚洲大片在线| 久久精品99国产精品日本| 在线日韩视频| 精品国产欧美日韩| 六月天综合网| 不卡专区在线| 你懂的国产精品| 国产精品日本欧美一区二区三区| 国产精品九九| 日本成人手机在线| 国产精品不卡| 日本中文字幕视频一区| 999久久久91| 国产欧美一区二区三区国产幕精品| 999国产精品视频| 日韩激情综合| 不卡中文字幕| 成人在线视频免费看| 国产日产精品一区二区三区四区的观看方式 | 国产精品久久| 日韩精品一区二区三区中文| 国内精品福利| 国产精品二区不卡| 美女免费视频一区| 日韩激情av在线| aⅴ色国产欧美| 国产伦精品一区二区三区在线播放| 国产欧美丝祙| 国产一区丝袜| 国产麻豆一区| 欧美一区91| 日韩亚洲精品在线| 福利在线免费视频| 国内精品麻豆美女在线播放视频| 日韩精品一二三区| 国产精品久久久久久久久妇女| 亚洲在线电影| 在线国产一区二区| 国产 日韩 欧美一区| 国产精品视频一区二区三区四蜜臂| 午夜视频精品| 国产精品亚洲综合色区韩国 | 麻豆免费精品视频| 国产精品一区二区三区美女 | 天堂av在线一区| 波多野结衣久久精品| 日本免费一区二区三区四区| 日韩中文字幕不卡| 国产精品人人爽人人做我的可爱| 日韩av福利| 久久天堂av| 99精品视频在线观看免费播放| 亚洲视频综合| 亚洲国产不卡| 免费观看在线综合| 日精品一区二区三区| 欧美精品影院| 国产精品任我爽爆在线播放| 国产精品天天看天天狠| 国内精品美女在线观看| 99久久久久久中文字幕一区| 在线日韩成人| 日韩中文在线电影| 91精品蜜臀一区二区三区在线| 国产精品亚洲一区二区三区在线观看| 国产网站在线| 99成人在线视频| 亚洲免费在线| 蜜臀av亚洲一区中文字幕| 蜜桃91丨九色丨蝌蚪91桃色| 日韩中文字幕一区二区高清99| 欧美中文高清| 国产+成+人+亚洲欧洲在线| 91精品xxx在线观看| 亚洲免费精品| 国产一卡不卡| 超碰在线99| 成人看片网站| 老色鬼久久亚洲一区二区| 欧美日韩一区自拍| 亚洲综合电影| 99国产成+人+综合+亚洲欧美| 日韩精品五月天| 久久精品国产久精国产爱| 桃色一区二区| 视频一区在线视频| 麻豆精品视频在线观看| 91精品亚洲| 日韩有吗在线观看| 免费亚洲婷婷| 不卡一区2区| 欧美天堂一区| 精品免费视频| 蜜臀av亚洲一区中文字幕| 国产毛片精品| 神马午夜久久| 中文字幕日韩高清在线 | 亚洲精品1区2区| 亚洲精品黄色| 日本一区二区高清不卡| 美女网站一区| 日韩高清不卡一区| 日韩欧美不卡| 亚洲视频电影在线| 国产福利片在线观看| 99久久99视频只有精品| 91精品丝袜国产高跟在线| 久久美女精品| 国产午夜一区| 香蕉精品视频在线观看| 国产精品99久久久久久董美香|