最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue?當(dāng)中組件之間共享數(shù)據(jù)的實(shí)現(xiàn)方式

 更新時間:2022年10月17日 08:32:35   作者:小魚兒同學(xué)啦  
這篇文章主要介紹了vue?當(dāng)中組件之間共享數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue組件之間共享數(shù)據(jù)方式

  • 父向子傳值:v-bind 屬性綁定
  • 子向父傳值:v-on  事件綁定
  • 兄弟組件之間共享數(shù)據(jù):EventHBus

$emit  發(fā)送數(shù)據(jù)的那個組件

$on  接收數(shù)據(jù)的那個組件

上面介紹的這三種組件之間的通訊方式,只適合在小范圍內(nèi)來進(jìn)行數(shù)據(jù)的共享,如果我們要頻繁的、大范圍的實(shí)現(xiàn)數(shù)據(jù)的共享,以上三種方式就有點(diǎn)力不從心了

Vuex

vuex是實(shí)現(xiàn)組件全局狀態(tài)(數(shù)據(jù))管理的一種機(jī)制,可以方便的實(shí)現(xiàn)組件之間的數(shù)據(jù)共享

使用vuex統(tǒng)一管理狀態(tài)的好處

  • 能夠在 vuex 中集中管理共享的數(shù)據(jù),易于開發(fā)和維護(hù)
  • 能夠高效的實(shí)現(xiàn)組件之間的數(shù)據(jù)共享,提高開發(fā)效率
  • 存儲在 vuex 中的數(shù)據(jù)都是響應(yīng)式的,能夠?qū)崟r保持?jǐn)?shù)據(jù)與頁面的同步

一般情況下,只有組件之間共享的數(shù)據(jù),才有必要存儲到 vuex 中,對于組件中的私有數(shù)據(jù),依舊存儲在組件自身的data中即可

vuex 的基本使用

1. 安裝 vuex 依賴包

npm install vuex --save

2. 導(dǎo)入 vuex 包

import Vuex from 'vuex'
Vue.use(vuex)

3. 創(chuàng)建store對象

const store = new Vuex.Store({
? ? // state 中存放的就是全局共享的數(shù)據(jù)
? ? state: { count: 0 }
})

4. 將 store 對象掛載到 vue 實(shí)例中

new Vue({
? ? el: '#app',
? ? render: h => h(app),
? ? router,
? ? // 將創(chuàng)建的共享數(shù)據(jù)對象,掛載到 vue 實(shí)例中
? ? // 所有的組件,就可以直接從 store 中獲取全局的數(shù)據(jù)了
? ? store
})

vuex 中的主要核心概念

state

State提供唯一的公共數(shù)據(jù)源,所有共享的數(shù)據(jù)都要統(tǒng)一放到 Store 的 State 中進(jìn)行存儲

// 創(chuàng)建store數(shù)據(jù)源,提供唯一的公共數(shù)據(jù)
const store = new Vuex.Store({
? ? state: { count:0 }
})

組件訪問state中數(shù)據(jù)的第一種方式:

this.$store.state.全局?jǐn)?shù)據(jù)名稱

組件訪問state中數(shù)據(jù)的第二種方式:

// 1. 從 vuex 中按需導(dǎo)入 mapState 函數(shù)
import { mapState } from 'vuex'

通過剛才導(dǎo)入到 mapState 函數(shù),將當(dāng)前組件需要的全局?jǐn)?shù)據(jù),映射為當(dāng)前組件的 computed 計算屬性:

// 2. 將全局?jǐn)?shù)據(jù),映射為當(dāng)前組件的計算屬性
computed: {
? ? ...mapState(['count'])
}

Mutation

Mutation 用于變更 Store 中的數(shù)據(jù)

只能通過 Mutation 變更 Store 中的數(shù)據(jù),不可以直接操作 Store 中的數(shù)據(jù)

通過這種方式雖然操作起來稍微繁瑣一些,但是可以集中監(jiān)控所有數(shù)據(jù)的變化

// 定義 Mutation
const store = new Vuex.Store({
? ? state:{
? ? ? ? count: 0
? ? }
}),
mutations:{
? ? add(state){
? ? ? ? //變更狀態(tài)
? ? ? ? state.count++
? ? }
}
?
// 觸發(fā)mutation
methods:{
? ? handle(){
? ? ? ? //觸發(fā) mutation 的第一種方式
? ? ? ? this.$store.commit('add')
? ? }
}

在觸發(fā) Mutation 時傳遞參數(shù):

// 定義 Mutation
const store = new Vuex.Store({
? ? state:{
? ? ? ? count: 0
? ? },
? ? mutations:{
? ? ? ? addN(state,step){
? ? ? ? ? ? // 變更狀態(tài)
? ? ? ? ? ? state.count += step
? ? ? ? }
? ? }
})
?
?
// 觸發(fā)mutation
methods:{
? ? handle2(){
? ? ? ? // 在調(diào)用 commit 函數(shù),觸發(fā) mutations 是攜帶參數(shù)
? ? ? ? this.$store.commit('addN',6)
? ? }
}

this.$store.commit() 是觸發(fā) mutations 的第一種方式,觸發(fā) mutations 的第二種方式:

//1. 從 vuex 中按需導(dǎo)入 mapMutations 函數(shù)
import { mapMutations } from 'vuex'

通過剛才導(dǎo)入的 mapMutations 函數(shù),將需要的 mutations 函數(shù),映射為當(dāng)前組件的 methods 方法:

methods:{
? ? ...mapMutations(['add','addN']),
? ? // 下面是在組件中的使用方法,此時映射的 add 和 addN 函數(shù)就相當(dāng)于當(dāng)前組件的方法,通過this調(diào)用即可
? ? btnHandle1(){
? ? ? ? this.add()
? ? }
? ? btnHandle2(){
? ? ? ? this.addN()
? ? }
}

Action

Action用來處理異步任務(wù)。

如果通過異步操作變更數(shù)據(jù),必須通過 Action,而不能使用 Mutation ,但是 Action 中還是要通過觸發(fā) Mutation 的方式間接變更數(shù)據(jù)

觸發(fā) actions 的第一種方式是 通過 this.$store.dispatch('函數(shù)名稱')

觸發(fā) actions 的第二種方式是 通過 按需導(dǎo)入 mapActions函數(shù),通過導(dǎo)入的 mapActions 函數(shù),將需要的 actions 函數(shù),映射為當(dāng)前組件的 methods 方法即可

// 定義 Action
const store = new Vuex.Store({
? ? state:{
? ? ? ? count: 0
? ? },
? ? mutations:{
? ? ? ? add(state){
? ? ? ? ? ? state.count++
? ? ? ? },
? ? ? ? //攜帶參數(shù)的形式
? ? ? ? addN(state,step){
? ? ? ? ? ? state.count += step
? ? ? ? }
? ? },
? ? actions:{
? ? ? ? addAsync(context){
? ? ? ? ? ? setTimeout(()=>{
? ? ? ? ? ? ? ? context.commit('add')
? ? ? ? ? ? },1000)?
? ? ? ? },
? ? ? ? // actions 攜帶參數(shù)的形式
? ? ? ? addAsyncN(context,step){
? ? ? ? ? ? setTimeout(()=>{
? ? ? ? ? ? ? ? context.commit('addN',step)
? ? ? ? ? ? },1000)
? ? ? ? }
? ? }
})
?
?
// 觸發(fā) Action
methods:{
? ? handle(){
? ? ? ? // 觸發(fā) actions 的第一種方式
? ? ? ? this.$store.dispatch('addAsync')
? ? },
? ? handle2(){
? ? ? ? // 觸發(fā) actions 時攜帶參數(shù)
? ? ? ? this.$store.dispatch('addAsyncN',6 )
? ? }
}

Getter

  • Getter 用于對 Store 中的數(shù)據(jù)進(jìn)行加工處理形成新的數(shù)據(jù)
  • Getter 可以對 Store 中已有的數(shù)據(jù)加工處理之后形成新的數(shù)據(jù),類似 Vue 的計算屬性

Store中的數(shù)據(jù)發(fā)生變化時,Getter的數(shù)據(jù)也會跟著發(fā)生變化

// 定義 getter
const store = new Vuex.Store({
? ? state:{
? ? ? ? count: 0
? ? },
? ? mutations:{},
? ? Actions:{},
? ? getters:{
? ? ? ? showNum: state => {
? ? ? ? ? ? return '當(dāng)前最新的數(shù)量是【'+ state.count +'】'
? ? ? ? }
? ? }
})

使用 getters 的第一種方式:

this.$store.getters.名稱

使用 getters 的第二種方式:

import { mapGetters } from 'vuex'
computed:{
? ? ...mapGetters(['showNum'])
}

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 媒體查詢media不生效的原因及解決

    媒體查詢media不生效的原因及解決

    媒體查詢@media常見的不生效原因包括格式書寫錯誤,例如and后必須有空格;樣式?jīng)_突,后面的CSS會覆蓋前面的;CSS本身存在問題,比如塊元素浮動導(dǎo)致父級元素?zé)o高度而背景顏色不顯示;漏掉了meta屬性中的viewport屬性,正確書寫和排列CSS代碼
    2024-10-10
  • 解決vue js IOS H5focus無法自動彈出鍵盤的問題

    解決vue js IOS H5focus無法自動彈出鍵盤的問題

    今天小編就為大家分享一篇解決vue js IOS H5focus無法自動彈出鍵盤的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • vue修改打包配置如何實(shí)現(xiàn)代碼打包后的自定義命名

    vue修改打包配置如何實(shí)現(xiàn)代碼打包后的自定義命名

    這篇文章主要介紹了vue修改打包配置如何實(shí)現(xiàn)代碼打包后的自定義命名,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue小白入門教程

    vue小白入門教程

    vue是一套用于構(gòu)建用戶界面的漸進(jìn)式框架,本文通過實(shí)例給大家介紹了vue入門教程適用小白初學(xué)者,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-04-04
  • vue項(xiàng)目調(diào)試的三種方法總結(jié)

    vue項(xiàng)目調(diào)試的三種方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于vue項(xiàng)目調(diào)試的三種方法,大家可以根據(jù)需要選擇調(diào)試方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • vue3+elementPlus二次封裝表單的實(shí)現(xiàn)代碼

    vue3+elementPlus二次封裝表單的實(shí)現(xiàn)代碼

    最近使用Vue3+ElementPlus開發(fā)項(xiàng)目,從整體上構(gòu)思組件的封裝。能寫成組件的內(nèi)容都進(jìn)行封裝,方便多個地方使用,這篇文章給大家介紹了vue3+elementPlus二次封裝表單的實(shí)現(xiàn),并通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • element?ui組件中element.style怎么改詳解

    element?ui組件中element.style怎么改詳解

    element.style是一種內(nèi)聯(lián)樣式,一般都是代碼里寫死的,下面這篇文章主要給大家介紹了關(guān)于element?ui組件中element.style怎么改的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • VUE DEMO之模擬登錄個人中心頁面之間數(shù)據(jù)傳值實(shí)例

    VUE DEMO之模擬登錄個人中心頁面之間數(shù)據(jù)傳值實(shí)例

    今天小編就為大家分享一篇VUE DEMO之模擬登錄個人中心頁面之間數(shù)據(jù)傳值實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 簡單了解vue中父子組件如何相互傳遞值(基礎(chǔ)向)

    簡單了解vue中父子組件如何相互傳遞值(基礎(chǔ)向)

    這篇文章主要介紹了簡單了解vue中父子組件如何相互傳遞值(基礎(chǔ)向),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • vue實(shí)現(xiàn)分割驗(yàn)證碼效果

    vue實(shí)現(xiàn)分割驗(yàn)證碼效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)分割驗(yàn)證碼效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

黄山市| 永宁县| 漳州市| 上蔡县| 康保县| 玉溪市| 宜川县| 武乡县| 贵德县| 银川市| 大关县| 绥江县| 沂南县| 龙泉市| 勃利县| 宁晋县| 武山县| 阿克陶县| 北碚区| 长葛市| 清苑县| 伊宁县| 呼图壁县| 福贡县| 金山区| 渭源县| 成都市| 茌平县| 乾安县| 南雄市| 浙江省| 库尔勒市| 修水县| 阿拉尔市| 齐齐哈尔市| 庐江县| 谢通门县| 盐源县| 肇源县| 陇川县| 威宁|