AngularJS.中分离模型和视图状态
Separating Model and View State in AngularJS
我有一个很大的复杂SPA,我正在用angular进行编码。在它中,我需要跟踪实际的模型数据——操作为"我从后端API服务器获取并发送到后端的东西"。我还有视图状态数据——"我跟踪的东西,但不会发送到API服务器"。模型数据是用户昵称或论坛帖子正文之类的东西,而视图状态数据是"扩展了这个特定的UI元素"——基本上是应用程序状态。
我想知道的是:有没有一种最佳实践的方法?在我更复杂的控制器中,我有一个ng个元素的重复,每个元素都有expandoUI元素。诱惑是将这些expandos放在ng if中,并将.showing变量附加到对象中。例如,可以想象这样的文本:ng-repeat="user in users", ng-click="user.showing = !user.showing", ng-if="user.showing"
在几个div中。这真的很方便,因为我们需要的关于重复项的视图状态的所有信息都在重复项上。
这闻起来也很糟糕——它可能会覆盖从API服务器获取的字段,而且由于我缓存数据模型以保存在API往返(并处理实时更新)上,这也意味着当用户导航离开并返回SPA中的同一位置时,视图状态会得到保留,或者如果相同的数据在屏幕上显示两次,则视图状态将被链接(例如,相同的配置文件在屏幕上的三个位置显示为对帖子的三个回复)。
我对在这里做什么有一些想法。我可以将所有视图状态变量封装在控制器中自己的位置,这样做的副作用是使ng重复更难实现(您可能必须使用$index属性查找视图状态变量)。
我可以将这一问题封装在一个指令中,对指令调用ng repeat,该指令本身具有隔离范围,并且只有一组状态变量要跟踪(因此不需要担心跟踪复杂的视图状态)。
我完全可以做SO社区建议的其他事情。
我倾向于指示路线。这似乎是一种有角度的做事方式。每个UI元素实际上并不需要在自己之外共享其状态,我目前真正这样做只是因为我最初的网络模型是大型HTML模板,我得到了这些模板,然后附加了ng个重复指令。我可以将Post、Comment、Author等元素分解为指令,然后它们就可以保持自己的状态。
是的,不管怎样,我最终把所有东西都分解成了指令。基本上,ng repeat中任何需要跟踪视图状态的项都有自己的指令(因此也有自己的隔离范围)。我还养成了在scope.view上隐藏视图相关变量的习惯,所以scope.view.showingExpandedReply=true,或者其他什么。这样我就不必用视图状态信息污染数据模型。
- WinJs中的视图状态更改事件在哪里
- ASP Web 窗体从视图状态中删除类客户端
- 视图是指定给模型的还是指定给Backbone.js中视图的模型
- 是否可以在没有视图状态和回发的情况下使用asp.net web表单
- 从Ember视图获取模型属性
- 控制器是否应直接访问视图的模型
- 在 Ember 中,视图/状态逻辑应该位于何处
- 离子选项卡视图 状态提供程序空白视图
- 代码点火器:从视图调用模型 - 数据库内容似乎冻结
- 主干视图在模型完成提取后获取模型变量
- Ember.js 视图状态不追加视图
- 木偶复合视图与模型
- AngularJS 视图在模型更新后不会更新
- 主干.js视图和模型关联
- AngularJS:使用不同的控制器保持不同视图之间的视图状态
- 离子不会更改视图/状态,除非它是一个选项卡
- 骨干视图说模型是未定义的
- 使用主干验证.js在没有视图的模型上
- 在骨干网中更改视图的模型.js
- AngularJS.中分离模型和视图状态