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

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

詳解vue組件之間的通信

瀏覽:190日期: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久久,三上悠亚国产精品一区二区三区
日韩国产专区| 国产欧美日韩精品一区二区免费| 少妇精品久久久一区二区| 夜久久久久久| 在线精品一区| 日韩avvvv在线播放| 亚洲欧洲av| 久久精品72免费观看| 久久电影一区| 国产免费成人| 亚洲精品黄色| 久久久亚洲欧洲日产| 伊人网在线播放| 亚洲欧洲午夜| 国产另类在线| 色88888久久久久久影院| 怡红院精品视频在线观看极品| 久久国产66| 欧美国产另类| 激情综合网五月| 日本不卡一区二区三区| 久久精品免费看| 亚洲一级高清| 国产日韩一区二区三区在线| 91视频一区| 石原莉奈在线亚洲二区| 欧美一区91| 1024精品一区二区三区| 青青国产精品| 红桃视频欧美| 国产精品hd| 亚洲一区二区成人| 久久婷婷国产| 少妇精品久久久| 亚洲不卡av不卡一区二区| 日韩不卡免费视频| 亚洲高清二区| 久久久久97| 日本午夜免费一区二区 | 午夜一级久久| 欧美aa在线观看| 国产精品亚洲片在线播放| 婷婷亚洲五月| 高清不卡亚洲| 国产一区三区在线播放| 国产女人18毛片水真多18精品| 性色av一区二区怡红| 日韩中文在线电影| 免费在线日韩av| 久久国际精品| 日本免费新一区视频| 91精品99| 麻豆mv在线观看| 欧美黑人巨大videos精品| 日韩精品乱码av一区二区| 麻豆精品网站| 丝袜诱惑制服诱惑色一区在线观看| 精品免费av一区二区三区| 国产欧美一区二区三区精品观看| 在线观看一区| 一区二区不卡| 亚洲精品少妇| 日韩动漫一区| 国产精品s色| 精品国产乱码| 免费看av不卡| 91国语精品自产拍| 在线天堂中文资源最新版| 国产69精品久久| 欧美日韩尤物久久| 国产在线欧美| 丝袜美腿高跟呻吟高潮一区| 久久xxxx精品视频| 亚洲一区二区三区中文字幕在线观看| 石原莉奈在线亚洲三区| 婷婷综合电影| 国产精品99精品一区二区三区∴| 国产精品嫩模av在线| 国产精品久久久久av蜜臀 | 日韩区欧美区| 久久国产欧美日韩精品| 精品精品久久| 国内精品99| 日本欧洲一区二区| 国产亚洲精品美女久久久久久久久久| 久久中文字幕导航| 日韩一区二区久久| 国产精品一区二区av日韩在线| 色一区二区三区| 亚洲a成人v| 久久久久久免费视频| 91国内精品| 午夜久久99| 国产人成精品一区二区三| 日韩欧美一区二区三区在线视频 | 亚洲另类av| 国产精品久久久久久久久久10秀 | 中文精品视频| 欧美一区91| 久久中文字幕av| 国产精品一国产精品| 亚洲午夜黄色| 精品国产一区二区三区噜噜噜| 午夜久久黄色| 国产精一区二区| 亚洲国产成人精品女人| 国产高清视频一区二区| 另类激情亚洲| 日韩免费在线| 国产精品亚洲综合色区韩国| 热久久免费视频| 精品1区2区3区4区| 日韩毛片在线| 韩国精品主播一区二区在线观看 | 婷婷综合亚洲| 国产黄大片在线观看| 国产丝袜一区| 亚洲欧美日韩在线观看a三区| 99国产精品一区二区| 国产aⅴ精品一区二区四区| 国产女人18毛片水真多18精品| 亚洲欧洲专区| 亚洲制服欧美另类| 另类亚洲自拍| 一区二区三区四区日韩| 夜夜嗨网站十八久久| 99国产精品视频免费观看一公开 | 精精国产xxxx视频在线野外| 国产精品传媒麻豆hd| 国产精品**亚洲精品| 国产精品主播| 国产精品久久久久久久久久白浆| 青草综合视频| 国产精品成人一区二区网站软件| 国产日产高清欧美一区二区三区 | 国产精品a级| 老色鬼精品视频在线观看播放| 国产日韩视频在线| 日本成人在线一区| 国产精品1区在线| 国产aⅴ精品一区二区三区久久| 精品国产一区二区三区av片| 精品久久91| 亚洲视频综合| 免费在线看一区| 日本国产欧美| 97精品视频在线看| 欧美日韩国产高清| 少妇精品久久久一区二区| 开心激情综合| 久久狠狠婷婷| 日韩高清成人在线| 成人精品视频| 日本韩国欧美超级黄在线观看| 9色精品在线| 欧美在线精品一区| 日韩一区二区在线免费| 亚洲精品欧美| 四虎884aa成人精品最新| 日韩中文字幕区一区有砖一区| 欧美精品国产白浆久久久久| 久草免费在线视频| 亚洲精品亚洲人成在线观看| 精品中文字幕一区二区三区四区| 午夜精品免费| 久久69成人| 亚洲精品福利| 色婷婷精品视频| 青青草91视频| 亚洲激情av| 国产成人精品999在线观看| 欧美在线综合| 欧美日韩国产在线观看网站| 久久精品欧洲| 青草国产精品| 亚洲欧美日韩国产综合精品二区 | 日韩精品电影| 久久一区精品| 欧美日本不卡| 日韩av一区二区三区| 亚洲在线观看| 久久婷婷激情| 午夜av成人| 久久精品av| 久久久久久黄| av一区在线| 欧美成人a交片免费看| 手机在线电影一区| 久久精品国产亚洲一区二区三区| 国产精品一区二区精品视频观看| 日韩精品一区二区三区中文在线 | 天堂中文在线播放| 精品国产亚洲一区二区三区在线 | 欧美一区在线观看视频| 日韩精品一页| 日本在线观看不卡视频| 视频在线观看一区| 美日韩精品视频| 日韩精品一区二区三区av| 日韩av三区|