Angularjs动态指令

时间:2013-07-14 02:51:20

标签: javascript angularjs

注意:我对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>

在实际情况中,会有很多带有奇怪接口的输入

1 个答案:

答案 0 :(得分:6)

ng-switchdocs)可以帮到你;像这样的东西:

<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-includedocs),其中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文档页面上的示例非常好。

请注意,包含的模板将被赋予当前范围的原型子范围。