我已经使用某些组件构建了一个已经存在的 AngularJS(1.6)应用程序。该应用程序本身只是一些旧的和已经存在的AngularJS指令的展示。我已经在一些组件中实现了它们,只是在UI上打印它们。
我最近一直在学习 Redux (我还是新手)并希望在整个项目中实现正确的redux行为。据我所知,单个应用程序状态,其中所有数据都是不可变的,单向绑定向下到其组件,这些组件使用由其父项创建的事件,最终使用reducer,重新创建应用程序状态并相应地更改数据。
我现在的问题是,这个现有指令是为自行修改数据而构建的,它们不会触发事件。
例如这个datepicker:
容器组件具有此代码
<example-datepicker date="model.date"></example-datepicker>
Datepicker组件使用此控制器绑定
bindings: {
date: '='
}
此模板,字面上使用我提到的旧指令
<date-picker date-model="model.date" name="dateForm"></date-picker>
现在,每当用户选择日期时,datepicker指令仅负责显示日期选择器,更改模型。现在假设我的应用程序状态有这个“日期”字符串。它应该是不可变的,那么,指令不应该改变它,对吗?
我是否应该相应地更改指令此行为,如果没有,如何触发此进入事件?我考虑过使用组件的 $ onChanges 函数,但这需要双向绑定,字面上更改模型,并且正在改变状态,这应该是不可变的。
我是否错误地理解了redux,或者我尝试使用的 State&gt; Component&gt; Directive 行为只是不可能使用Redux?
提前致谢
答案 0 :(得分:1)
首先,您可以尝试使用其连接器ng-redux,认为它可以简化某些内容。除此之外,我们的想法是您应该从指令/组件调度操作来更新存储,并且商店会通知所有侦听器有关更改(您可以使用redux提供的订阅方法)。
同样重要的一点是,您不需要将所有数据存储在redux存储中,有时具有自己数据的指令/组件(可能是双向绑定数据)对表单更灵活。在这种情况下,您只需要在某个地方派遣一个行动。
如果你需要触发 $ onChanges 挂钩,你应该只更新对传递给组件的对象的引用