这个算是一个小的demo嘛,先放上开源github地址:https://github.com/sascha245/vuex-simple

倒是可以先看下效果



呃呃,因为这个项目所在的目录与平时我们一般项目写在src中不同,我甚至怀疑这个本身其实是一个插件,这个demo只是其中的测试项目。

先看下项目目录



首先还是从基础文件进入项目

//main.ts
import 'reflect-metadata'; import Vue from 'vue';
import VueTypedi from 'vue-typedi'; import App from './App.vue';
import router from './router';
import store from './store'; Vue.config.productionTip = false;
Vue.use(VueTypedi); new Vue({
render: h => h(App),
router,
store
}).$mount('#app');
//samples\router.ts
import Vue from "vue";
import Router from "vue-router"; import About from "./views/About";
import Home from "./views/Home"; Vue.use(Router); export default new Router({
routes: [
{
component: Home,
name: "home",
path: "/",
},
{
component: About,
name: "about",
path: "/about",
}
]
});



这个里面比较有意思的是分离了ts文件,其实应该说就像是js文件也可以这样分解啊,不过这个算是打开了我的思路

接下来我们看核心内容home页面

我们进一步进行分析,发现减这个行为是比较独立的,先看减数

state中给其定义了不同的module,比如my1可以看做是核心的store

import { Module, State } from '../../../../src';
import { MyModule } from '../my'; export class TestState {
@Module()
public my1 = new MyModule(5); @Module()
public my2 = new MyModule(); @State()
public counter: number = 10; @State()
public name: string = 'Will';
}
//samples\store\modules\my.ts
import { Mutation, State } from '../../../src'; export class MyModule {
@State()
public counter: number = 0; @Mutation()
public increment() {
this.counter++;
} constructor(counter = 0) {
this.counter = counter;
}
}
//samples\store\modules\test\getters.ts
import { Getter } from '../../../../src';
import { TestState } from './state'; export class TestGetters extends TestState {
@Getter()
public get cachedGetter() {
return {
item: this.counter + 100
};
} @Getter()
public get total() {
return this.counter + this.my1.counter + this.my2.counter;
} public get normalGetter() {
return {
item: this.counter + 100
};
}
}
//samples\store\modules\test\mutations.ts
import { Mutation } from '../../../../src';
import { TestGetters } from './getters'; export class TestMutations extends TestGetters {
@Mutation()
public setCounter(count: number) {
this.counter = count;
} @Mutation()
public increment() {
this.counter++;
}
}
//samples\store\store.ts
import { Action, Getter, Module, Mutation, State } from '../../src';
import { MyModule } from './modules/my';
import { TestModule } from './modules/test';
import { TodoModule } from './modules/todo'; export class MyStore {
@Module()
public my = new MyModule(20); @Module()
public test = new TestModule(); @Module()
public todo = new TodoModule(); @State()
public version = '2.0.0'; @State()
public rootCounter = 0; @Getter()
public get aRootCounter() {
return this.rootCounter;
} /**
* Getter example with method style access
*/
@Getter()
public get numberButIncreased() {
return (nb: number) => {
return nb + 1;
};
} @Mutation()
public incrementRootCounter() {
this.rootCounter += 1;
} @Action()
public async actionIncrementRootCounter() {
await new Promise(r => setTimeout(r, 1000));
this.incrementRootCounter();
}
}

后记:我数据流向还是没有弄清除

【心无旁骛】vuex-simple的更多相关文章

  1. 搭建项目vue + vue-router + vuex + vue-i18n + element-ui + egg + sequelize

    vue + vue-router + vuex + vue-i18n + element-ui + egg + sequelize https://www.cnblogs.com/wuguanglin ...

  2. VueX源码分析(2)

    VueX源码分析(2) 剩余内容 /module /plugins helpers.js store.js helpers要从底部开始分析比较好.也即先从辅助函数开始再分析那4个map函数mapSta ...

  3. 关于Vue.js 2.0 的 Vuex 2.0,你需要更新的知识库

    应用结构 实际上,Vuex 在怎么组织你的代码结构上面没有任何限制,相反,它强制规定了一系列高级的原则: 应用级的状态集中放在 store 中. 改变状态的唯一方式是提交mutations,这是个同步 ...

  4. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  5. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  6. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  7. vuex 初体验

    vuex是vue的状态管理工具,vue进阶从es6和npm开始,es6推荐阮一峰大神的教程. vuex学习从官方文档和一个记忆小游戏开始.本着兴趣为先的原则,我先去试玩了一把-->. Vuex ...

  8. WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION

    开启阅读模式 WATERHAMMER A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION Waterhammer is an impact load that is ...

  9. vuex(1.0版本写法)

    Vuex 是一个专门为 Vue.js 应用所设计的集中式状态管理架构. 官方文档:http://vuex.vuejs.org/zh-cn/  2.0和1.0都能在此找到 每一个 Vuex 应用的核心就 ...

  10. BZOJ 3489: A simple rmq problem

    3489: A simple rmq problem Time Limit: 40 Sec  Memory Limit: 600 MBSubmit: 1594  Solved: 520[Submit] ...

随机推荐

  1. Image 释放

    你是用 Image.FromFile取的图片吧,这个方法会锁定图片文件. 有几种方法解决:一:System.Drawing.Image img = System.Drawing.Image.FromF ...

  2. 配置文件一mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...

  3. curl 一个使用例子

    #include <iostream> #define Main main #include <string> #include <assert.h> #inclu ...

  4. thinkphp 空控制器

    空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化. 大理石平台价格表 现在我们把前 ...

  5. duilib库分析4.第二篇UIBase

    DUiLib 源码分析 ——以UiLib 1.01版为分析目标 ——colin3dmax 分析于2011-6-16 19:44------------------------------------- ...

  6. springboot启动器:spring-boot-starter

    今天想要导入thymeleaf的依赖,但是又不想从其他博复制粘贴,于是去spring官方文档找一找 在idea新建的springbootweb项目中,有一个HELP.md文件,里面包含spring w ...

  7. Java学习之创建对象内存使用机制

    Java内存空间分两种,一种是栈内存,有多个,一种是堆内存,只有一个,在堆内存中又有一块方法区. 方法区中存储的是:类的信息(类名,类的直接父类,类的访问修饰符),类变量,类方法代码,实例方法代码,常 ...

  8. CDH spark2切换成anaconda3的问题

    最近spark2有同事想用anaconda3做开发,原因是上面可以跑机器学习的库(服务器因为没外网pip装whl确实麻烦) 1.先在每台机器安装anaconda3 2.把用户的~/.bashrc配置进 ...

  9. JConsole&VisualVM监控总结

    简介JConsole(以下写作jconsole),VisualVM(以下写作jvisualvm ) 都是比较好的JVM调优工具,且都为JDK自带,可在命令行直接启动. 监控示例Server端(需要监控 ...

  10. 【左偏树】 [JLOI2015]城池攻占

    原来左偏树还可以打tag,get了 和线段树打tag一样,时不时Push_Down就好了 然后这里显然也是要先乘法后加法的 tag打上了之后还是其他一般左偏树差不多,有些细节注意一下 然后开 long ...