Best solution to Enums in AngularJS?
我很难找到一个雅致的枚举解决方案,尤其是用AngularJS搜索枚举。
让我描述一个情况和我如何处理它:假设我有一个对象,叫做Event。此事件有两个属性:Severity和Status。两者都是由ID(1,2,3)和标题(严重性:"轻"、"正常"、"重要"和状态:"打开"、"关闭"、"待批准")定义的枚举。
来自服务的事件对象具有枚举的ID,当我想显示对象时,我用{{ severityIdToTitle(Event.Severity) }}绑定了该对象。SeverityIDToTitle是我的控制器上的一个方法,它调用我的服务上的一个方法,该方法根据收到的ID返回枚举的值。当我希望用户能够通过文本搜索对象时,问题就出现了,AngularJS过滤器不知道枚举的实际"字符串"值,所以我找到了我的问题。
我知道很多解决方法,有一些选择,但我想知道什么是一个独立的、干净的解决方案?我所做的使事情复杂化了吗?还有更好的方法吗?
谢谢大家!
- 如果没有针对search的更具体的用例,很难回答这个问题,因为您有解决方法的想法……所以应该提供这些解决方案。此网站上收到的帮助基于实时代码的疑难解答。通过在plunker或jsfiddle.net中创建一个演示来获得更多的帮助,该演示还提供了问题的概述。
- 为什么你不在javascript中做一个枚举,然后只在Angular中使用它?我发现这个问题:stackoverflow.com/questions/287903/enums-in-javascript很有用。我实施了邓肯的解决方案。
有趣的问题。我将创建一个自定义过滤器,而不是使用SeverityIDToTitle函数。过滤器设计用于格式化数据以呈现给用户,因此将ID转换为字符串是一个很好的使用案例。过滤器应该依赖于一个知道枚举标识符及其值之间双向映射的服务。至于如何进行映射,这是一个普通的javascript问题。这里有一条很好的线索。
- 不错,我会使用显示标题的过滤器,但是当用户输入文本并且实际值是数字时,我该如何通过用户输入来过滤事件(比如我有一个ng重复列表)?
- 你可以做一些像ng-repeat=item in items | filter:(user_input|event_name_to_id)这样的事情。换句话说,您可以嵌套过滤器。如果您创建一个plnkr或jspodle来处理您的启动示例,我很乐意使用它编写完整的解决方案。