代碼管理
每天早上更新一下代碼git pull
vuex的學習
vuex的了解
Vuex是一個專門為vue.js應用程序開發的狀態管理模式。
狀態管理模式,包括以下幾個部分
state:驅動應用程序的數據源
view:以聲明的方式將state映射到視圖
actions:響應在view上的用戶輸入導致的狀態變化
每一個Vuex應用的核心及時store(倉庫)。store基本上就是一個容器,它包含著你的應用中大部分的狀態(state)。
store.state來獲取狀態對象,以及通過store.commit方法觸發狀態變更
通過提交 mutation 的方式,而非直接改變 store.state.count,是因為我們想要更明確地追蹤到狀態的變化
mapState輔助函數
大概使用:
computed:mapState({
count:state => state.count
})
store.state.orderList 映射this.orderList
store對象的使用
store.state.count
vuex通過store選項,提供了一種機制將狀態從根組件“注入”到每一個子組件中(需要調用vue.use(Vuex)):
const app = new Vue({
el: '#app',
// 把 store 對象提供給 “store” 選項,這可以把 store 的實例注入所有的子組件
store,
components: { Counter },
template: `
<div class="app">
<counter></counter>
</div>
`
})
通過根實例中注冊store選項,該store實例會注入到根組件下的所有的子組件中,而且子組件能夠通過this.$store訪問到
const Counter = {
template: `<div>{{ count }}</div>`,
computed: {
count () {
return this.$store.state.count
}
}
}
個人理解:store中的state相當于vue實例中的data,store中的getter相當于vue實例中的一個computed
mutation
更改Vuex的store中的狀態的唯一方法就是提交mutation。
要喚醒一個mutation handler,你需要以相應的type調用store.commit方法
store.commit('increment')
每個mutation都有一個字符串的事件類型(type)和一個回調函數(handler)
可以使用常量替代Mutation事件類型
mutation一定要是同步函數
vue的響應規則
1.最好提前在你的store中初始化好所有的屬性
2.添加新屬性的時候,使用Vue.set(obj,'newProp',123)
或者以老對象替換老對象,對象擴展符 state.obj = { ...state.obj, newProp: 123 }
action
Action函數接受一個與store實例具有相同方法和屬性的context對象,因此你可以調用context.commit提交一個mutation,或者通過context.state和context.getters來獲取state和getters
Action通過store.dispatch方法觸發
store.dispatch('increment')
個人理解:
dispatch——>action——>mutation——>state——>view
之所以使用store.dispatch,是因為mutation必須同步,但是要在action執行異步操作的時候,就需要用到store.dispatch
個人理解:組件中computed中的狀態,通過mapGetters映射到store中的數據的狀態。
組件中methods中的方法,通過mapActions映射到store中暴露出去的事件
箭頭函數
組件
全局注冊
使用components進行局部注冊
slot
具名插槽
作用域插槽
注意,在父級中,具有特殊特性的slot-scope的template元素必須存在,表示它是作用域插槽的模板。slot-scope的值作為一個臨時變量名,此變量接受從子組件傳遞過來的prop對象。
父組件與子組件之間的通信
子傳父
使用$emit和$on
父傳子
通過prop
slot
父組件怎么使用到子組件的方法呢?可以使用ref指定組件ID,然后在父組件中拿到子組件,進而操作子組件的方法