4

注意:我对 angularjs 很陌生

问题的最佳解决方案/实践是什么:我有一个数组或类型化的值,对于每种类型应该有不同的输入(模板和输入验证)?

例如和简化

var vars = [
    {
        type: 'int',
        value: 42,
        min: 0,
        max: 42
    },
    {
        type: 'text',
        value: 'foobar'
    },
]

对于'int'模板将是

<input type="range" max="{{max}}" min="{{min}}" value="{{value}}" />

对于“文本”

<textarea>{{value}}</textarea>

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

4

1 回答 1

6

An 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非常好。

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

于 2013-07-14T04:05:09.790 回答