vuex執行流程

//        一.給state賦值
//        1.dispatch store的action,參數1:action名稱,參數2:傳入參數(組件)
//        2.action 裏調api請求結果(store)
//        3.結果commit到對應的mutation,經過mutation改變state(store)
//        4.經過getter獲取state
//        二.在組件裏拿到state,用state構建界面數據(store)
//        5.computed獲取getter state(組件)

使用Vuex的步驟:php

(1)安裝:vue

  1.使用npm安裝:ajax

    npm install vuex  --savevuex

  2.使用script標籤引入npm

    <script src="/path/to/vue.js"></script>json

    <script src="/path/to/vuex.js"></script>後端

  若是使用第一種方式安裝Vuex插件,在使用Vuex插件以前須要在main.js入口文件中api

    1‘ 使用import方式引入Vuexapp

      import Vuex from ‘vuex’異步

    2‘ 使用Vue的插件引入函數Vue.use()使用Vuex

      Vue.use(Vuex);

(2)安裝以後能夠經過Vuex實例對象的Store方法建立一個store對象:

  

var store = new Vuex.Store({
    state:{
        NewMsg:{
            Msgs:[
                {
                    title:'暫無消息',
                    content:'暫無消息!',
                    url:'#no_msg',
                    id:'no_msg'
                }
            ]
        },
    },
    mutations:{
        modifyMsg (state,Obj){
            if(state.NewMsg.Msgs[0].id === 'no_msg'){
                state.NewMsg.Msgs.shift();
            }
            var obj = {
                title:Obj.title,
                content:Obj.content
            };
            obj.id = 'Msg_' + Obj.id;
            obj.url = '#' + obj.id;
            state.NewMsg.Msgs.push(obj);
        }
    },
    actions:{
        fetchMsg (context){
            $.ajax({
                    url:'PHP/GetMsgs.php',
                    type:'GET',
                    data:{},
                    dataType:'json',

                    success:function(response){
                        if ( typeof response === 'string') {
                            response = JSON.parse(response);
                        }
                        console.log(response);
                        $(response).each(function(k,v){
                            // console.log(v.id+v.title+v.content);
                            context.commit('modifyMsg',v);
                        });
                    }
                });
        }
    }
});

 

(3)在Vue實例中註冊store對象:

  

new Vue({
  el: '#app',
  router,
  store,
  created (){
      store.dispatch('fetchMsg');
  },
  template: '<App/>',
  components: { App }
})

 

(4)在組件中使用state數據:

  必須經過computed屬性使用state數據!不然state屬性中的數據發生更改時不會反映在組件上!

  

export default {
        computed: {
            Msgs (){
                var Msgs = this.$store.state.NewMsg.Msgs;
                return Msgs;
            }
        }
    }

 

注意事項: 

  基本組成:

    注意到這個store對象包含三個子對象:

      state、mutations、actions

    其中state用於存儲數據,相似vue實例的data屬性。

    mutations用於遞交更改,對state對象中的屬性數據進行更改。

    actions用於進行遞交異步更改,經過調用mutations實現對數據的更改。

 

  actions與mutations的區別:

    其中actions區別於mutations的地方在於mutations只能進行同步更改,而actions中的更改能夠是異步執行。因此基本上全部用戶執行的直接數據更改都是觸發mutations屬性

    函數執行,而須要與後端進行數據交互的數據更改一般是經過actions屬性函數去執行。

 

  定義actions與mutations屬性函數的注意事項:

    其中定義mutations屬性函數時必須傳遞的第一個參數是state,由於要對state進行更改,第二個參數表明傳入的新參數。mutations屬性函數只接受兩個參數,若是要同時更

    改多個屬性值,能夠經過對象傳入。

     在actions屬性函數中能夠經過context.commit()方法觸發mutations屬性函數。定義actions屬性函數時,必須傳遞的第一個參數是context,用於觸發mutations函數。

 

  觸發actions與mutations屬性函數的方法:

    在子組件中經過this.$store.commit()方法觸發mutations屬性函數。在註冊store的Vue實例中(第三步中將會講到)能夠經過store.commit()觸發。

    commit函數第一個參數是mutations的屬性函數名,第二個參數是傳入的新值。

    actions屬性函數中能夠進行異步操做,好比經過ajax或者Vue.Resource()進行數據獲取,獲取數據後再經過context.commit()觸發更改。

     觸發actions屬性函數使用this.$store.dispatch()或者store.dispatch() (在註冊store的Vue實例中)函數。dispatch函數傳遞的一個參數是actions屬性函數名稱。若是但願在

    Vue實例建立完成還未掛載時就從後端獲取數據,則能夠在created鉤子函數中調用actions屬性函數。

 

  在組件中訪問數據中心state的注意事項:

    在Vue實例中能夠經過this.$store.state對象獲取state中的數據。若是但願在state中的數據發生更改以後,組件會自動更新,則應該使用組件的computed屬性定義數據,而

    不是經過data屬性定義。若是使用data定義組件數據,則state中的數據發生更改以後組件不會發生變化。

  

export default {
        computed: {
            Msgs (){
                var Msgs = this.$store.state.NewMsg.Msgs;
                return Msgs;
            }
        }
    }
相關文章
相關標籤/搜索