我正在使用Angular构建一个webapp。
此应用程序引导用户授权帐户,根据用户选择提供具体说明。
我已将其实现为基于模型中的值显示或隐藏的HTML,因此对于3种不同的选择,我有3组不同的HTML部分,它们相似但文本不同。
根据DRY的精神,我应该有一组HTML部分,而是根据模型的值切换文本。这意味着将文本数据放入模型中,包括标记的小片段,如锚点和强标记。
将演示数据放入控制器是否违反了Angular的原则?
答案 0 :(得分:2)
有许多选项可以避免重复代码,具体取决于您要查看的内容。以下想法是我会考虑并在有意义时使用的东西(我把这些从简单到复杂放置,所以你可能会跳过前几个):
ng-bind - 将其放在span / div上。简单&用于将模型绑定到显示
ng-switch,ng-if,ng-hide,ng-show - 有条件地展示元素的工作
自定义指令 - 如果要根据模板更改dom,如果要更改元素或的行为,请使用此选项。如果使用“ng-transclude”,则模板元素的内容将包含在结果中。这可以非常优雅,但是当您使用单一格式时效果最佳。我可以提供示例,但angular的文档也有很好的例子。
服务 - 我通常只使用它来提供数据。这可以通过一个宁静的api和$资源或通过$ http调用。无论哪种方式,我都不建议在这里加载/保存数据。
$ scope method - 换句话说:
$ scope.myMethod = function(x,y,z){/ *代码根据模型做出决定* /}
然后你可以通过一个预先构建的指令(ng-show等)或者通过一个自定义指令来调用这个方法,该指令可以根据你的预期操作dom。
ng-bind-html - 我知道建议的最后一个选项是使用此指令与$sce服务结合,将您想要的任何内容绑定到DOM。如果您使用角度代码绑定某些内容 - 请务必使用$compile服务。我一般不赞成这种方法,除非作为最后的手段,因为它使得更难找到DOM中的元素来自哪里,它可以使调试+测试真正的痛苦。也就是说,如果人们不需要这些工具,就不会存在这些工具。
我确信这不完整,也许其他人有建议,但这就是我要开始的地方。祝你好运!
答案 1 :(得分:1)
我会将文本数据放在一个单独的角度服务中。本文举例说明:http://joelhooks.com/blog/2013/04/24/modeling-data-and-state-in-your-angularjs-application/
然后,如果您决定将其移至其他存储,则您的服务仍然是应用程序其余部分的单一访问点。