这个算是一个小的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. thinkphp 输入变量

    在Web开发过程中,我们经常需要获取系统变量或者用户提交的数据,这些变量数据错综复杂,而且一不小心就容易引起安全隐患,但是如果利用好ThinkPHP提供的变量获取功能,就可以轻松的获取和驾驭变量了. ...

  2. JSONObject 序列化后,对象数据为引用地址

    最近在json序列化的时候,遇到了个坑,记录如下: public static void main(String[] args) { JSONObject json = new JSONObject( ...

  3. 学习Caffe(一)使用Caffe

    如何使用Caffe Caffe教程(http://robots.princeton.edu/courses/COS598/2015sp/slides/Caffe/caffe_tutorial.pdf) ...

  4. MySQL 笔记一

    一.基本语法 1.数据库操作 create database [IF NOT EXIEST ] 数据库名   --创建数据库 drop database  数据库名                   ...

  5. C语言结构体初始化方法

    早上苏凯童鞋问我这个问题来着,写在这里. 我了解到的C中结构体初始化的方法大概有三种. 如这里我定义了一个结构体: typedef struct node { int x, y; }Node; 第一种 ...

  6. iOS开发之SceneKit框架--SCNView.h

    1.SCNView 在macOS中,SCNView是NSView的子类,在iOS和tvOS中,SCNView是UIView的子类.SCNView用于显示SceneKit的3D场景,而需要设置场景的相关 ...

  7. CSS 属性1

    CSS列表属性 list-style:列表样式,取值:none.去掉项目符号或编号前面的各种符号. CSS边框属性:每个元素都可以加边框线  border-left:左边框线.   格式:border ...

  8. POJ-2752-Seek the Name-kmp的变形

    The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the l ...

  9. QString组合、拆分。

    1.组合字符常用arg()函数 QString test=QString("_haha_%1_hehe%2") .arg("ee").arg("aa& ...

  10. Django之单表查询——神奇的双下划线

    1.filter中的单表查询 # 查询id>1且id<4的结果 ret = models.Person.objects.filter(id__gt=1,id__lt=4) print(re ...