注意:我对angularjs
很新问题的最佳解决方案/实践是什么: 我有一个数组或类型值,每种类型应该有不同的输入(模板和输入验证)?
E.g。和简化
var vars = [
{
type: 'int',
value: 42,
min: 0,
max: 42
},
{
type: 'text',
value: 'foobar'
},
]
'int'模板的将是
<input type="range" max="{{max}}" min="{{min}}" value="{{value}}" />
和'text'
<textarea>{{value}}</textarea>
在实际情况中,会有很多带有奇怪接口的输入
答案 0 :(得分:6)
ng-switch
(docs)可以帮到你;像这样的东西:
<div ng-repeat="item in items">
<div ng-switch on="item.type">
<div ng-switch-when="int">
<input type="range" max="{{item.max}}" min="{{item.min}}"
ng-model="item.value" />
</div>
<div ng-switch-when="text">
<textarea ng-model="item.value"></textarea>
</div>
</div>
</div>
<强> [更新] 强>
由于您提到要根据类型动态包含模板,请查看ng-include
(docs),其中Angular表达式将评估为URL:
<div ng-repeat="item in items">
<div ng-include="'input-' + item.type + '-template.htm'"></div>
</div>
如果您不喜欢内联字符串连接,可以使用控制器方法生成URL:
<div ng-repeat="item in items">
<div ng-include="templatePathForItem(item)"></div>
</div>
ngInclude
文档页面上的示例非常好。
请注意,包含的模板将被赋予当前范围的原型子范围。