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

Vuex模塊化實(shí)現(xiàn)待辦事項(xiàng)的狀態(tài)管理

 更新時(shí)間:2017年03月15日 14:35:30   作者:_林鑫  
本文主要介紹了Vuex模塊化實(shí)現(xiàn)待辦事項(xiàng)的狀態(tài)管理的相關(guān)知識,具有很好的參考價(jià)值,下面跟著小編一起來看下吧

前言

在vue里,組件之間的作用域是獨(dú)立的,父組件跟子組件之間的通訊可以通過prop屬性來傳參,但是在兄弟組件之間通訊就比較麻煩了。比如A組件要告訴一件事給B組件,那么A就要先告訴他們的爸組件,然后爸組件再告訴B。當(dāng)組件比較多,要互相通訊的事情很多的話,爸組件要管他們那么多事,很累的。vuex正是為了解決這個(gè)問題,讓多個(gè)子組件之間可以方便的通訊。

項(xiàng)目介紹

待辦事項(xiàng)中的一個(gè)事件,它可能擁有幾個(gè)狀態(tài),未完成、已完成、已取消或被刪除等。這個(gè)事件需要在這多種狀態(tài)之間切換,那么使用vuex來管理也是非常方便的。

來看一下vuex怎么完成狀態(tài)管理的:

所有組件都是調(diào)用actions,分發(fā)mutation去修改state,然后state經(jīng)過getter又更新到各個(gè)組件里。state又通過localStorage存儲數(shù)據(jù)到本地,下次重新打開時(shí)再讀取保存的數(shù)據(jù)。

模塊化

為什么要用模塊化?當(dāng)我們的項(xiàng)目比較大,組件很多,功能也多,會導(dǎo)致state里要存放很多內(nèi)容,整個(gè) store 都會很龐大,很難管理。

我模塊化的store目錄如下:

|-store/   // 存放vuex代碼
| |-eventModule  // 事件模塊
| | |-actions.js
| | |-getters.js
| | |-index.js
| | |-mutations.js
| | |-state.js
| |-themeModule  // 主題顏色模塊
| | |-actions.js
| | |-getters.js
| | |-index.js
| | |-mutations.js
| | |-state.js
| |-index.js  // vuex的核心,創(chuàng)建一個(gè)store

可以看到,每個(gè)模塊擁有自己的state、mutation、action、getter,這樣子我們就可以把我們的項(xiàng)目根據(jù)功能劃分為多個(gè)模塊去使用vuex了,而且后期維護(hù)也不會一臉懵逼。

狀態(tài)管理

接下來,我們來看看vuex完成狀態(tài)管理的一個(gè)流程。

舉個(gè)栗子:一個(gè)待辦事項(xiàng),勾選之后,會在未完成列表里移除,并在已完成的列表里出現(xiàn)。這個(gè)過程,是這個(gè)待辦事項(xiàng)的狀態(tài)發(fā)生了改變。勾選的時(shí)候,是執(zhí)行了一個(gè)方法,那我們就先寫這個(gè)方法。在 event_list.vue 文件里新建一個(gè)moveToDone方法。

methods: {
 moveToDone(id){ //移至已完成
 this.$store.dispatch('eventdone', id);
 }
}

在 moveToDone 方法中通過 store.dispatch 方法觸發(fā) action, 接下來我們在 eventModule/actions.js 中來注冊這個(gè) action, 接受一個(gè) id 的參數(shù)。

module.exports = {
 eventdone = ({ commit }, param) =>{
 commit('EVENTDONE',{id: param});
 }
}

action 通過調(diào)用 store.commit 提交載荷(也就是{id: param}這個(gè)對象)到名為'EVENTDONE'的 mutation,那我們再來注冊這個(gè) mutation

module.exports = {
 EVENTDONE(states,obj){
 for (let i = 0; i < states.event.length; i++) {
  if (states.event[i].id === obj.id) {
  states.event[i].type = 2;
  states.event[i].time = getDate();
  var item = states.event[i];
  states.event.splice(i, 1);  // 把該事件在數(shù)組中刪除
  break;
  }
 }
 states.event.unshift(item);   // 把該事件存到數(shù)組的第一個(gè)元素
 local.set(states);    // 將整個(gè)狀態(tài)存到本地
 }
}

通過 mutation 去修改 state, state里我們存放了一個(gè) event 屬性

const state = {
 event: []
};
export default state;

在組件中要獲得這個(gè) state 里的 event, 那就需要寫個(gè)getters

const getters = {
 getDone(states){
 return states.event.filter(function (d) {
  if (d.type === 2) {   // type == 2表示已完成
  return d;   // 返回已完成的事件
  }
 });
 }
};
export default getters;

然后每個(gè)module里都有一個(gè)index.js文件,把自己的state、mutation、action、getters都集合起來,就是一個(gè)module

import * as func from '../function';
import * as actions from './actions.js';
import * as mutations from './mutations.js';
import state from './state.js';
import getters from './getters.js';
module.exports = {
 state,
 getters,
 actions,
 mutations
}

在 store/index.js 里創(chuàng)建一個(gè) store 對象來存放這個(gè)module

import Vue from 'vue';
import Vuex from 'vuex';
import event from './eventModule';
Vue.use(Vuex);
module.exports = new Vuex.Store({
 modules: {
 event
 }
});

最后在 event_list.vue 組件上,我們通過計(jì)算屬性 computed 來獲取到這個(gè)從未完成的狀態(tài)改變到已完成的狀態(tài),我們要用到 store 這個(gè)對象里的getters

computed: {
 getDone(){
 return this.$store.getters.getDone;
 }
}

這樣子,完成了 '未完成' => '已完成' 從提交修改到更新視圖讀取的整個(gè)流程,也是 vuex 工作的整個(gè)流程。通過 module 的封裝,更加方便多模塊項(xiàng)目的開發(fā)和維護(hù)。

源碼地址 :notepad

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • vue Element左側(cè)無限級菜單實(shí)現(xiàn)

    vue Element左側(cè)無限級菜單實(shí)現(xiàn)

    這篇文章主要介紹了vue Element左側(cè)無限級菜單實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Vue 3 中的 toRef 和 toRefs 函數(shù)案例講解

    Vue 3 中的 toRef 和 toRefs 函數(shù)案例講解

    這篇文章主要介紹了Vue 3 中的 toRef 和 toRefs 函數(shù),toRef 和 toRefs 函數(shù)是 Vue 3 中的兩個(gè)非常有用的函數(shù),它們可以幫助我們更好地管理組件中的響應(yīng)式數(shù)據(jù),并且可以提高組件的性能和用戶體驗(yàn),需要的朋友可以參考下
    2024-06-06
  • vue打包優(yōu)化時(shí)配置webpack的8大方案小結(jié)

    vue打包優(yōu)化時(shí)配置webpack的8大方案小結(jié)

    vue-cli?生成的項(xiàng)目通常集成Webpack?,在打包的時(shí)候,需要webpack來做一些事情,這里我們希望它可以壓縮代碼體積,提高運(yùn)行效率,本文為大家整理了8大webpack配置方案,希望對大家有所幫助
    2024-02-02
  • Vue混入mixins分發(fā)組件可復(fù)用功能

    Vue混入mixins分發(fā)組件可復(fù)用功能

    混入 (mixin) 提供了一種非常靈活的方式,來分發(fā) Vue 組件中的可復(fù)用功能。一個(gè)混入對象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對象時(shí),所有混入對象的選項(xiàng)將被“混合”進(jìn)入該組件本身的選項(xiàng)
    2022-09-09
  • vue-socket.io接收不到數(shù)據(jù)問題的解決方法

    vue-socket.io接收不到數(shù)據(jù)問題的解決方法

    這篇文章主要介紹了解決vue-socket.io接收不到數(shù)據(jù)問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • bpmn-js在vue中的基本使用及操作功能

    bpmn-js在vue中的基本使用及操作功能

    這篇文章主要介紹了bpmn-js在vue中的基本使用及操作功能,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友跟隨小編一起看看吧
    2024-02-02
  • 詳解在vue-cli中引用jQuery、bootstrap以及使用sass、less編寫css

    詳解在vue-cli中引用jQuery、bootstrap以及使用sass、less編寫css

    這篇文章主要介紹了詳解在vue-cli中引用jQuery、bootstrap以及使用sass、less編寫css,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • vue中如何使用ztree

    vue中如何使用ztree

    這篇文章主要介紹了vue中如何使用ztree,包括配置package.json,自動加載jquery的方法,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 基于Vue實(shí)例生命周期(全面解析)

    基于Vue實(shí)例生命周期(全面解析)

    下面小編就為大家?guī)硪黄赩ue實(shí)例生命周期(全面解析)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • vue過渡和animate.css結(jié)合使用詳解

    vue過渡和animate.css結(jié)合使用詳解

    本篇文章主要介紹了vue過渡和animate.css結(jié)合使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

喀喇沁旗| 军事| 武宣县| 澎湖县| 班玛县| 紫金县| 大足县| 余江县| 兴山县| 江城| 巴塘县| 江都市| 沂水县| 伊通| 马龙县| 安吉县| 思茅市| 化德县| 温泉县| 保靖县| 郓城县| 扎鲁特旗| 郯城县| 渝中区| 沧州市| 徐汇区| 光山县| 济宁市| 凭祥市| 南靖县| 崇仁县| 禹州市| 长治市| 庄浪县| 广南县| 伊川县| 东阿县| 安吉县| 那坡县| 新宾| 连城县|