2017-01-09 73 views
3

是否有任何最佳实践或aurelia国家管理图书馆? 像vue.js的集成状态管理?Aurelia国家管理

我已经看到了一些建议,从一个简单的对象:

出口默认{ 用户:......, 路由器:..., ..., }

一些奥里利亚还原集成:https://github.com/steelsojka/aurelia-redux-plugin

有没有人用一个较低复杂度的图书馆制作好经验? Redux在我看来是很多样板文件。我想要一些与连衣裤相似的小包装,以便做出反应。

我已经使用多次尝试:

store.js

存储作为对象:

export default{ 
    test: 'xxx' 
}; 

店作为类:

export default class Store{ 
    constructor() { 
    this.test = 'xxx'; 
    } 
}; 

和在分量I整合它像这样:

import { inject } from 'aurelia-framework'; 
import store from './store'; 

@inject(store) 
export class TestComp { 
    constructor(store){ 
    this.store = store; 
    } 
} 

甚至没有注入:

import store from './store'; 

export class TestComp { 
    constructor(){ 
    this.store = store; 
    } 
} 

所有组合似乎只是正常工作和实体店查看/组件之间保持同步。

一个优于另一个的优点是什么?或者你会建议完全不同的方法吗?

+0

难道你不能只注册一个对象作为单身人士,并将其注入您的类?你有怀疑吗? –

+0

@FabioLuz这就是我现在正在做的事情,但它看起来太简单明了了......我恐怕这是坏的设计:) – Chris

+0

嗯,我不认为这是一个糟糕的设计。发布您当前的解决方案,以便我们可以在必要时提出改进建议 –

回答

0

我已经去了类方法,然后注入类和我需要它的地方。

import {observable} from 'aurelia-framework'; 
import {Cookie} from 'aurelia-cookie'; 

export class AppConfig { 

    @observable companyCode; 
    @observable applCodeInUse; 
    @observable theme; 

    constructor() { 
    // Set up properties in here 
    } 

    // Some functions used for value conversion 

} 

然后,因为注入的类被作为单身处理 - 你可以注入AppConfig类和访问性能。

import {inject, NewInstance, ObserverLocator} from 'aurelia-framework'; 
import {AppConfig} from 'config/AppConfig'; 

@inject(AppConfig) 
export class Form { 
    constructor(appConfig) { 
     this.appConfig = appConfig; 
    } 
} 

这显然与您的解决方案非常相似。我使用了一个类,因为有一些业务逻辑用于转换值等。

你的疑惑似乎是关于这是否是糟糕的设计 - 但Aurelia的要点是只要你的代码遵循标准,那么你可以自由地使用任何你喜欢的约定来实现你的结果。据我所知,这种方法没有任何关系,违背了最新的JS标准。它也轻巧灵活。我看到它没有问题。

1

另一种方法是继续使用传统服务,但只通过操作更改存储中的单个状态。你可以在这里找到一篇关于它的文章http://pragmatic-coder.net/using-a-state-container-with-aurelia/。此方法在订阅的核心上使用RxJS BehaviorSubject,以使组件与状态同步。除此之外,与使用redux并重写应用程序相比,它为现有应用程序提供了更简单的升级途径。 Oh和Redux DevTools支持也包括在内;)

0

如果您正在使用Typescript编写代码,并且希望以较不详细和面向对象的方式使用redux,则应该签出redux-app

这里有一个简单的例子:

@component 
class App { 
    counter = new Counter(); 
} 

@component 
class Counter { 
    value = 0; 

    increment() { 
     this.value = this.value + 1; 
    } 
} 

const app = new ReduxApp(new App()); 

console.log(app.root.counter.value); // 0 
console.log(app.store.getState()); // { counter: { value: 0 } } 

app.root.counter.increment(); // will dispatch COUNTER.INCREMENT redux action 

console.log(app.root.counter.value); // 1 
console.log(app.store.getState()); // { counter: { value: 1 } } 

虽然它与其他框架的工作为好,有很多examples使用Aurelia路上。

完全披露,我是图书馆的作者。