vuex

文檔:http://vuex.vuejs.org/zh-cn/modules.html
這個(gè)modules是用來(lái)干什么的?

這里寫圖片描述
前面我們做了一個(gè)這樣的界面,有登錄,有熱點(diǎn)新聞。 我們學(xué)到了vuex
這樣一個(gè)框架。
這里寫圖片描述
我們可以看到state
里,我們把user_name和新聞是糅合在一起的,如果我們這個(gè)項(xiàng)目的多人協(xié)作開發(fā),這樣就不是很方便。 所以modules
就起到了這樣一個(gè)作用。
我們來(lái)演示一下怎么使用這個(gè)modules
1.項(xiàng)目結(jié)構(gòu)(我們參考了官方的http://vuex.vuejs.org/zh-cn/structure.html) 把用戶和新聞模塊分開。
這里寫圖片描述
2.UserModules.js:
export default{ state:{ user_name:"" }, mutations:{ showUserName(state){ alert(state.user_name); } },}

3.NewsModules.js:
export default{ state:{ newslist:[], newsdetail:{} }, mutations:{ setAgree(state,agreeNum){ state.newsdetail.agree = agreeNum; } }, actions:{ agree(context,newsid){ // 進(jìn)行請(qǐng)求,獲取點(diǎn)贊后的agree字段屬性值 Vue.http.post("http://localhost/agree.php",{newsid:newsid},{emulateJSON:true}).then(function (res) { // 處理業(yè)務(wù) // 調(diào)用上面setAgree方法更新點(diǎn)贊數(shù) context.commit("setAgree",res.body.agree); },function(){}) } }, getters:{ getNews(state){ return state.newslist.filter(function (news) { return !news.isdeleted; }) } }}

4.這2步做好之后,我們已經(jīng)把用戶和新聞分離了,分離之后怎么引入呢?
import UserModule from "./../store/modules/UserModule";import NewsModule from "./../store/modules/NewsModule";

const vuex_store = new Vuex.Store({ modules:{ users:UserModule, news:NewsModule }})

這個(gè)時(shí)候是否大功告成呢,肯定不是

這里寫圖片描述
5.之后我們需要修改組件 news-list.vue
:
這里寫圖片描述
需要修改此處的代碼,需要加上我們的模塊名,修改之后:
<script> export default{ created(){ if (this.$store.state.news.newslist.length == 0){ // 請(qǐng)求服務(wù)器獲取數(shù)據(jù) this.$http.get("http://localhost/news.php").then(function (res) { this.$store.state.news.newslist = res.body; },function (res) { // 請(qǐng)求失敗處理 }) } } }</script>

this.$store.state.news.newslist
,news
就是前面定義的module名。
user-name.vue

: 如果我們不做任何修改,點(diǎn)擊“提交”按鈕是獲取不到用戶輸入的用戶名的
這里寫圖片描述
修改如下:
<script> export default{ props:["placeholder"], data:function () { return { username:"" } }, methods:{ userNameChange(){ //this.$emit("childChange","username",this.username) this.$store.state.users.user_name = this.username; } } }</script>

this.$store.state.user_nam
修改為:this.$store.state.users.user_name
。

這里寫圖片描述

至此,聰明的你應(yīng)該已經(jīng)發(fā)現(xiàn):之前代碼所有用到state
的地方,都應(yīng)該加上module名稱來(lái)訪問(wèn)。
其他注意點(diǎn)
// 進(jìn)行請(qǐng)求,獲取點(diǎn)贊后的agree字段屬性值Vue.http.post("http://localhost/agree.php",{newsid:newsid},{emulateJSON:true}).then(function (res) {// 處理業(yè)務(wù)// 調(diào)用上面setAgree方法更新點(diǎn)贊數(shù)context.commit("setAgree",res.body.agree);},function(){})

NewsModule.js中,我們是通過(guò)Vue.http.post()
來(lái)獲取服務(wù)器數(shù)據(jù)的,可能會(huì)找不到Vue
,所以在這個(gè)文件頭部,我們?cè)俅我胍幌拢?br> import Vue from "vue";

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 安裝 npm npm install vuex --save 在一個(gè)模塊化的打包系統(tǒng)中,您必須顯式地通過(guò)Vue.u...
    蕭玄辭閱讀 3,053評(píng)論 0 7
  • Vuex 的學(xué)習(xí)記錄 資料參考網(wǎng)址Vuex中文官網(wǎng)Vuex項(xiàng)目結(jié)構(gòu)示例 -- 購(gòu)物車Vuex 通俗版教程N(yùn)uxt....
    流云012閱讀 1,554評(píng)論 0 7
  • import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(V...
    F_imok閱讀 2,695評(píng)論 0 12
  • vuex 場(chǎng)景重現(xiàn):一個(gè)用戶在注冊(cè)頁(yè)面注冊(cè)了手機(jī)號(hào)碼,跳轉(zhuǎn)到登錄頁(yè)面也想拿到這個(gè)手機(jī)號(hào)碼,你可以通過(guò)vue的組件化...
    sunny519111閱讀 8,168評(píng)論 4 111
  • 這兩天在做Vue移動(dòng)端的項(xiàng)目,正好用到了Vuex,記錄一下相關(guān)知識(shí)。 一、安裝 npm yarn Vuex是Vue...
    婷樓沐熙閱讀 7,803評(píng)論 2 2

友情鏈接更多精彩內(nèi)容