【发布时间】:2016-11-29 13:44:23
【问题描述】:
问题:
如何防止类似 HTML 模板中的代码重复?
说明
对于同一个视图/指令,我有几个不同的模板,我想根据环境进行更改。模板大多相同,但包含一些需要根据环境进行更改的部分。
示例:
对于管理员来说,输入用户数据的视图可能如下所示:
<p> Username: </p>
<input ng-model="ctrl.username"></input>
<p> Firstname: </p>
<input ng-model="ctrl.firstname"></input>
<p> Lastname: </p>
<input ng-model="ctrl.lastname"></input>
<p> Authorization-level: </p>
<input ng-model="ctrl.authlevel"></input>
但是我需要向用户显示基本相同的视图,而不允许他更改其授权级别:
<p> Username: </p>
<input ng-model="ctrl.username"></input>
<p> Firstname: </p>
<input ng-model="ctrl.firstname"></input>
<p> Lastname: </p>
<input ng-model="ctrl.lastname"></input>
<p> Authorization-level: </p>
{{ctrl.authlevel}}
我想防止两个模板的代码重复。
可能的解决方案:
ng-if
显然,我可以根据条件使用ng-if 在模板中交换 html 块。但是,这不能很好地扩展。上面的例子很简单,但想象一下我有 5-10 个不同版本的模板。随着该模板的版本数量增加,代码变得越来越难以阅读。此外,理想情况下,我希望防止将管理视图的代码发送给用户,如果它包含在同一个 html 文件中,我不能这样做。
自定义指令
我可以将需要替换的每个 HTML 节点包装在它自己的指令中。这将保持主模板干净,我可以根据环境将 HTML 模板交换为指令。然而,所有这些额外的指令都会导致大量的样板代码。
(虽然这似乎最接近 Angular2 的组件)
第三方库角块
我发现angular-blocks 似乎很好地解决了我想要解决的问题。但是,它似乎不是很受欢迎,并且在查看实现时,我担心这可能会导致大型应用程序出现性能问题(由于多个嵌套的$compile-calls)。
有没有我遗漏的选项?你知道这方面的任何最佳实践或风格指南吗?
【问题讨论】:
-
为什么不直接使用 ng-disabled??
-
在 ng-formly 的模式上创建一个自定义指令,对你有很大帮助...
标签: javascript html angularjs templates