av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

Vue 同步異步存值取值實(shí)現(xiàn)案例

瀏覽:83日期:2022-12-16 08:15:14

1.vue中各個(gè)組件之間傳值

1.父子組件

父組件?>子組件,通過(guò)子組件的自定義屬性:props

子組件?>父組件,通過(guò)自定義事件:this.emit(′事件名′,參數(shù)1,參數(shù)2,...);

2.非父子組件或父子組件通過(guò)數(shù)據(jù)總數(shù)Bus,this.root.$emit(‘事件名’,參數(shù)1,參數(shù)2,…)

3.非父子組件或父子組件

更好的方式是在vue中使用vuex

方法1: 用組件之間通訊。這樣寫(xiě)很麻煩,并且寫(xiě)著寫(xiě)著,估計(jì)自己都不知道這是啥了,很容易寫(xiě)暈。

方法2: 我們定義全局變量。模塊a的數(shù)據(jù)賦值給全局變量x。然后模塊b獲取x。這樣我們就很容易獲取到數(shù)據(jù)

2. Vuex

Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。可以想象為一個(gè)“前端數(shù)據(jù)庫(kù)”(數(shù)據(jù)倉(cāng)庫(kù)),

讓其在各個(gè)頁(yè)面上實(shí)現(xiàn)數(shù)據(jù)的共享包括狀態(tài),并且可操作

Vuex分成五個(gè)部分:

1.State:?jiǎn)我粻顟B(tài)樹(shù)

2.Getters:狀態(tài)獲取

3.Mutations:觸發(fā)同步事件

4.Actions:提交mutation,可以包含異步操作

5.Module:將vuex進(jìn)行分模塊

3. vuex使用步驟

3.1 安裝

打開(kāi)項(xiàng)目根目錄,shift+鼠標(biāo)右鍵進(jìn)入窗口,輸入以下命令

npm install vuex -S

3.2 在src目錄下面創(chuàng)建store模塊,分別維護(hù)state/actions/mutations/getters

Vue 同步異步存值取值實(shí)現(xiàn)案例

1.State:?jiǎn)我粻顟B(tài)樹(shù)

2.Getters:狀態(tài)獲取

3.Mutations:觸發(fā)同步事件

4.Actions:提交mutation,可以包含異步操作

5.Module:將vuex進(jìn)行分模塊

5、在store里面的index.js文件,并在文件中導(dǎo)入各大模塊

index.js

import Vue from ’vue’import Vuex from ’vuex’import state from ’./state’import getters from ’./getters’import actions from ’./actions’import mutations from ’./mutations’

Vue.use(Vuex)

const store = new Vuex.Store({ state, // 共同維護(hù)的一個(gè)狀態(tài),state里面可以是很多個(gè)全局狀態(tài) getters, // 獲取數(shù)據(jù)并渲染 actions, // 數(shù)據(jù)的異步操作 mutations // 處理數(shù)據(jù)的唯一途徑,state的改變或賦值只能在這里})export default store ///導(dǎo)出

6. Vuex的核心概念

store:每一個(gè)Vuex應(yīng)用的核心就是store(倉(cāng)庫(kù)),store基本上就是一個(gè)容器,它包含著你的應(yīng)用中大部分的狀態(tài) (state)。

state:我們用來(lái)存放我們需要用到的變量

gettters:用來(lái)獲取我們定義的變量

mutations:操作我們定義的變量,同步操作

actions:操作我們定義的變量,異步操作

state.js

export default { // 凡是工程里的變量都定義到這里來(lái),同時(shí)可以分類管理 resturantName: ’飛鴿傳書(shū)’}

gettters.js

export default{ getResturantName: (state) => { return state.resturantName; }}

mutations.js

export default { setResturantName: (state, payload) => { state.resturantName = payload.resturantName; return this.$store.state.resturantName; }}

actions.js

export default{ setResturantNameAsyc: (context, payload) => { console.log(’xxx’) setTimeout(()=>{ console.log(’yyy’) context.commit(’setResturantName’, payload); //Action提交的是mutation },3000); console.log(’zzz’) }, doAjax:(context, payload) => { // 在vuex里面不能使用vue實(shí)例 let _this = payload._this; let url = this.axios.urls.SYSTEM_USER_DOLOGIN; // let url = ’http://localhost:8080/T216_SSH/vue/userAction_login.action’; console.log(url); _this.axios.get(url, {}).then((response) => { console.log(’doAjax.........’) console.log(response); }).catch(respone)=>{ console.log(response); } }}

將store在main.js中導(dǎo)入并掛載Vue 中實(shí)例

vuex綜合案例

需求:兩個(gè)組件A和B,vuex維護(hù)的公共數(shù)據(jù)是餐館名:resturantName,默認(rèn)值:飛歌餐館,

那么現(xiàn)在A和B頁(yè)面顯示的就是飛歌餐館。如果A修改餐館名稱為A餐館,則B頁(yè)面顯示的將會(huì)是A餐館,反之B修改同理。

這就是vuex維護(hù)公共狀態(tài)或數(shù)據(jù)的魅力,在一個(gè)地方修改了數(shù)據(jù),在這個(gè)項(xiàng)目的其他頁(yè)面都會(huì)變成這個(gè)數(shù)據(jù)。

VuePage1.vue

<template> <div> <h3 style='margin: 60px;'>第一個(gè)Vuex頁(yè)面{{title}}</h3> <button @click='changTitle'>餐館易主</button> <button @click='changTitleAsync'>兩個(gè)月后餐館易主</button> <button @click='changTitleAsync'>測(cè)試Vuex中使用ajax</button> </div></template><script> export default { data() { return { }; }, methods: { changTitle() { this.$store.commit(’setResturantName’, { }); }, changTitleAsync() { this.$store.dispatch(’setResturantNameAsync’, { resturantName: ’小李飛刀羊肉館’ }); }, doAjax(){ this.$store.dispatch(’doAjax’,{ _this:this }) } }, computed: { title() { return this.$store.getters.getResturantName; } }, created(){ this.title=this.$store.state.resturantName; } }</script><style></style>

VuePage2.vue

<template> <div> <h3 style='margin: 60px;'>第二個(gè)Vuex頁(yè)面{{title}}</h3> this.$store.commit(type,payload); </div> </template><script> export default{ data(){ return{ }; }, created(){ this.title=this.$store.state.resturantName; } }</script><style></style>

Vue 同步異步存值取值實(shí)現(xiàn)案例

Action類似于 mutation,不同在于:

1.Action提交的是mutation,而不是直接變更狀態(tài)

2.Action可以包含任意異步操作

3.Action的回調(diào)函數(shù)接收一個(gè) context 上下文參數(shù),注意,這個(gè)參數(shù)可不一般,它與 store 實(shí)例有著相同的方法和屬性

但是他們并不是同一個(gè)實(shí)例,context 包含:

1. state、2. rootState、3. getters、4. mutations、5. actions 五個(gè)屬性

所以在這里可以使用 context.commit 來(lái)提交一個(gè) mutation,或者通過(guò) context.state 和 context.getters 來(lái)獲取 state 和 getters。

注1:actions中方法的調(diào)用方式語(yǔ)法如下:

this.store.dispatch(type,payload);例如:this.store.dispatch(type,payload);例如:this.store.dispatch(‘setResturantNameByAsync’,{resturantName: ‘啃德雞2’});

注2:action中提交mutation

context.commit(‘setResturantName’,{resturantName: ‘啃德雞2’});

注3:VUEX 的 actions 中無(wú)法獲取到 this 對(duì)象

如果要在actions 或者 mutations 中使用this對(duì)象。可以在調(diào)用的時(shí)候把this對(duì)象傳過(guò)去

{resturantName: ‘啃德雞2’,_this:this}//this就是在調(diào)用時(shí)的vue實(shí)例

Vuex中actions的使用場(chǎng)景

場(chǎng)景1:部門管理中添加或刪除了新的部門,員工新增/編輯頁(yè)面的部門列表需要進(jìn)行變化

場(chǎng)景2:vuex之使用actions和axios異步初始購(gòu)物車數(shù)據(jù)

以上這篇Vue 同步異步存值取值實(shí)現(xiàn)案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 日韩欧美中文字幕在线观看 | 亚洲网址在线观看 | 午夜影院 | 精品久久一区 | 免费国产一区二区 | 国产精品18久久久 | 日韩欧美一区二区三区免费观看 | 免费黄网站在线观看 | 丁香五月网久久综合 | 日韩欧美大片 | 色婷婷av一区二区三区软件 | 91视视频在线观看入口直接观看 | 亚洲 中文 欧美 日韩 在线观看 | 午夜影院黄 | 在线欧美a| 精品久久久久久久久久久久 | 美女激情av | 午夜精品一区二区三区在线 | 成人在线视频免费播放 | 久久一 | 国产精品久久久久久久久图文区 | 成人免费视频在线观看 | 久久日韩精品 | 无码日韩精品一区二区免费 | 日韩精品久久久 | 福利精品| 99福利视频 | 国产1区2区3区 | 国产精品区二区三区日本 | 日韩欧美二区 | 91精品在线播放 | 91色在线| 中文字幕在线中文 | 在线观看成年视频 | 蜜桃av一区二区三区 | 热久久免费视频 | 欧美区在线| 性生活毛片 | 欧美日韩综合 | 久久精品一区 | 午夜电影福利 |