最近在學習
typescript
,並結合vue
練習一個demo.在這個demo將涉及如下知識點vue
- vue-class-component
- vuex-class
參考文章git
vue-cli
yarn global add @vue/cli
vue --version // @vue/cli 4.1.1
// 使用ui界面建立新項目, 固然也能夠使用命令的方式 vue ui
這裏要勾選typescript
github
等待安裝.vuex
安裝支持vuex
class模式的vuex-module-decorators
vue-cli
yarn add vuex-module-decorators
cd vue-typescript/src/views touch Counter.vue
添加如下內容(代碼沒法格式化,圖片代替)/src/views/Counter.vue
typescript
修改/src/store/index.ts
學習
添加一個vuex-module
/src/store/counter.ts
ui
/src/store/index.ts
. 會看到,這個導出的store
中沒有module
. 這是由於module
會在建立時動態導入.而後是添加了一個VuexModuleWithUpdater
, 這個類的用處是給全部的module
定義一個公共方法$updateState
, 而這個方法能夠接受一個對象來更新module
中的state
, 其本質是一個mutation
./src/stroe/couter.ts
中, 定義了state
和module
的接口,這些接口將會在vue
組件中使用到.@Module({ name: 'counter', dynamic: true, store })
中的dynamic
表示這個module
將動態導入. store
則是導入的目標根據store
. 在導出這個module
時, 須要使用getModule
.最後來看頁面組件(/src/views/Counter.vue
).spa
import CounterModule, { ICounter } from '@/store/modules/counter' class { get counterIns(): ICounter { return CounterModule } }
先導入關聯的module
, 而後經過computed
屬性將module
的實例掛載到當前的vue
組件中.這個counterIns
實例將包含全部的屬性和方法(這與之前的vue注入state
和actions
的方式有所不一樣).3d
在本demo主要涉及vue-property-decorator
和vuex-module-decorators
這兩個庫,能夠讓vue
和vuex
使用基於類的方式來編寫. 日後將繼續深刻學習.