vue通訊 傳值的多種方式

2022-08-03 08:18:14 字數 2997 閱讀 6795

一、通過路由帶引數進行傳值

①兩個元件 a和b,a元件通過query把orderid傳遞給b元件(觸發事件可以是點選事件、鉤子函式等)

this.$router.push( }) // 跳轉到b

②在b元件中獲取a元件傳遞過來的引數

this.$route.query.orderid

二、通過設定 session storage快取的形式進行傳遞

①兩個元件a和b,在a元件中設定快取orderdata

const orderdata =

sessionstorage.setitem('快取名稱', json.stringify(orderdata))

②b元件就可以獲取在a中設定的快取了

const datab = json.parse(sessionstorage.getitem('快取名稱'))

此時 datab 就是資料 orderdata

三、父子元件之間的傳值

(一)父元件往子元件傳值props

①定義父元件,父元件傳遞 number這個數值給子元件,如果傳遞的引數很多,推薦使用json陣列{}的形式

②定義子元件,子元件通過 props方法獲取父元件傳遞過來的值。props中可以定義能接收的資料型別,如果不符合會報錯。

當然也可以簡單一點,如果不考慮資料型別,直接 props:["number","string"]就可以了,中括號包裹,多個值使用,分隔。

③假如接收的引數 是動態的,比如 input輸入的內容 v-model的形式

注意:傳遞的引數名稱 支援駝峰命名,下圖 描述不正確(1.0是不支援的)

④父子元件傳值,資料是非同步請求,有可能資料渲染時報錯

原因:非同步請求時,資料還沒有獲取到但是此時已經渲染節點了

解決方案:可以在 父元件需要傳遞資料的節點加上  v-if = false,非同步請求獲取資料後,v-if = true

(二)、子元件往父元件傳值,通過emit事件

四、不同元件之間傳值,通過eventbus(小專案少頁面用eventbus,大專案多頁面使用 vuex)

①定義乙個新的vue例項專門用於傳遞資料,並匯出

②定義傳遞的方法名和傳輸內容,點選事件或鉤子函式觸發eventbus.emit事件

③接收傳遞過來的資料

注意:enentbus是乙個另乙個新的vue例項,區分兩個this所代表得vue例項

五、vuex進行傳值

為什麼使用vuex?

vuex主要是是做資料互動,父子元件傳值可以很容易辦到,但是兄弟元件間傳值(兄弟元件下又有父子元件),或者大型spa單頁面框架專案,頁面多並且一層巢狀一層的傳值,異常麻煩,用vuex來維護共有的狀態或資料會顯得得心應手。

需求:兩個元件a和b,vuex維護的公共資料是 餐館的名稱 resturantname,預設餐館名稱是 飛歌餐館,那麼現在a和b頁面顯示的就是飛歌餐館。如果a修改餐館名稱 為 a餐館,則b頁面顯示的將會是 a餐館,反之b修改同理。這就是vuex維護公共狀態或資料的魅力,在乙個地方修改了資料,在這個專案的其他頁面都會變成這個資料。

①使用 vue-cli腳手架工具建立乙個工程專案,工程目錄,建立元件a和元件b路由如下:

路由如下:

②開始使用vuex,新建乙個 sotre資料夾,分開維護 actions mutations getters

②在store/index.js檔案中新建vuex 的store例項

*as的意思是 匯入這個檔案裡面的所有內容,就不用乙個個例項來匯入了。

import vue from 'vue'

import vuex from 'vuex'

import * as getters from './getters' // 匯入響應的模組,*相當於引入了這個元件下所有匯出的事例

import * as actions from './actions'

import * as mutations from './mutations'

vue.use(vuex)

// 首先宣告乙個需要全域性維護的狀態 state,比如 我這裡舉例的resturantname

const state =

// 註冊上面引入的各大模組

const store = new vuex.store()

export default store // 匯出store並在 main.js中引用註冊。

③actions

// 給action註冊事件處理函式。當這個函式被觸發時候,將狀態提交到mutations中處理

export function modifyaname(, name)

export function modifybname(, name)

// es6精簡寫法

// export const modifyaname = (,name) => commit('modifyaname', name)

④mutations

// 提交 mutations是更改vuex狀態的唯一合法方法

export const modifyaname = (state, name) =>

export const modifybname = (state, name) =>

⑤getters

④在元件a中,定義點選事件,點選 修改 餐館的名稱,並把餐館的名稱在事件中用引數進行傳遞。

...mapactions 和 ...mapgetters都是vuex提供的語法糖,在底層已經封裝好了,拿來就能用,簡化了很多操作。

其中...mapactions(['clickafn']) 相當於this.$store.dispatch('clickafn',),mapactions中只需要指定方法名即可,引數省略。

...mapgetters(['resturantname'])相當於this.$store.getters.resturantname

元件a餐館名稱:}

修改為a餐館

跳轉到b頁面

b元件同理

元件b餐館名稱:}

修改為b餐館

跳轉到a頁面

Vue通訊 傳值的多種方式

this.router.push 跳轉到bthis.route.query.orderid 兩個元件a和b,在a元件中設定快取orderdata const orderdata sessionstorage.setitem 快取名稱 json.stringify orderdata const da...

vue 通訊 傳值的多種方式

目錄四 vuex 1 兩個元件 a和b,a元件通過query把orderid傳遞給b元件 觸發事件可以是點選事件 鉤子函式等 this.router.push 跳轉到b2 在b元件中獲取a元件傳遞過來的引數 this.route.query.orderid1 兩個元件a和b,在a元件中設定快取ord...

Vue傳值方式

1.provide和inject實現祖先與後代元件傳值 祖先元件 export default provide 後代元件 export default 2.props實現父向子傳值 父元件 zhnagsan age 2 子元件 export default 3.emit實現子元件傳資料給父元件 子元...