【问题标题】:AngularJS - ngRepeat with multiple object typesAngularJS - 具有多种对象类型的 ngRepeat
【发布时间】:2013-01-03 17:34:03
【问题描述】:

我有一个物品清单。一个项目可以是很多东西,假设列表是这样的:

[userObject , vehicleObject , userObject , animalObject , animalObject]

现在我想使用 ngRepeat 指令渲染列表,该指令将根据对象的类型使用模板(多态渲染)。这个可以吗?

可能类似于(ng-use 是一个假设指令):

<ul>
    <li ng-repeat="item in items">
       <img ng-use="item.type == 'user'" ng-src="item.src">
       <a ng-use="item.type == 'vehicle'">{{item.link}}</a>
       <span ng-use="item.type == 'animal'">{{item.name}}</span>
    </li>
</ul>

【问题讨论】:

    标签: javascript dom polymorphism angularjs rendering


    【解决方案1】:

    虽然这不使用 ng-switch,但它确实解决了没有 type 字段的问题,@DotNetHaggis 指出了这一点。

    <div ng-repeat="field in fields">
        <div ng-if="field.user !== undefined">user info</div>
        <div ng-if="field.vehicle !== undefined">vehicle info</div>
        <div ng-if="field.animal !== undefined">animal info</div>
    </div>
    

    【讨论】:

      【解决方案2】:
      <ul>
          <li ng-repeat="item in items" ng-switch="item.type">
             <img ng-switch-when="user" ng-src="item.src">
             <a ng-switch-when="vehicle">{{item.link}}</a>
             <span ng-switch-when="animal">{{item.name}}</span>
          </li>
      </ul>
      

      API 参考:
      http://docs.angularjs.org/api/ng.directive:ngSwitch

      【讨论】:

      • 还有一件事......你能合并案例吗,比如 ng-switch-when="'user'||'animal'"?
      • 不,你不能那样做。顺便说一句,当使用ng-switch-when 时,您不应该使用额外的''(与我的第一个答案相反),并且 Angular 将属性值作为字符串处理。这是相关的源代码:github.com/angular/angular.js/blob/master/src/ng/directive/…
      • 谢谢,非常详细
      • 这依赖于具有“类型”字段的项目对象...如果您的对象没有该字段怎么办?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2012-10-19
      • 2014-03-09
      • 1970-01-01
      • 2016-01-20
      相关资源
      最近更新 更多