Ng-repeat,第一个具有不同指令的项目

时间:2014-02-03 21:45:50

标签: javascript angularjs angularjs-directive ng-repeat

我收到了以下代码:

<div ng-repeat="i in placeholders" square class="set-holder {{i.class}}" droppable="{{i.type}}"></div>

我如何使第一个项目具有指令bigsquare,而其他项目只有square

我试过了:

<div ng-repeat="i in placeholders" {{= $first ? 'big' : ''}}square class="set-holder {{i.class}}" droppable="{{i.type}}"></div>

但遗憾的是我的结果是:

<div ng-repeat="i in placeholders" {{= $first ? 'big' : ''}}square class="set-holder test" droppable="3"></div>

a.k.a。绑定不会被编译。

4 个答案:

答案 0 :(得分:34)

您可以按如下方式使用ng-repeat-startng-repeat-end

angular.module('example', [])
  .controller('ctrl', function Ctrl($scope) {
    $scope.items = [1,2,3];
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="example" ng-controller="ctrl">
  <div ng-repeat-start="item in items" ng-if="$first" big>
    big item {{item}}
  </div>
  <div ng-repeat-end ng-if="!$first">
    item {{item}}
  </div>
</div>

可以在ng-repeat下找到文档。

答案 1 :(得分:3)

请看这个小提琴http://jsfiddle.net/nicolasmoise/xLfmK/2/

您可以创建一个传递条件的指令。根据该条件,它将显示正方形或大正方形。

         <div ng-repeat="repeat in repeater" condition="$first" square></div>

注意 如果您不想更改已经创建的指令,则可以始终将square作为调用其他两个指令的主指令。

答案 2 :(得分:2)

如果您不介意在<div>内使用其他<li>,则应该可以使用<div>来完成ng-if="$index == ??"的条件阻止。< / p>

也许是这样的:

<div ng-repeat="i in placeholders">
  <div bigsquare class="set-holder {{i.class}}" droppable="{{i.type}}" ng-if="$index == 0">
    ...
  </div>
  <div mediumsquare class="set-holder {{i.class}}" droppable="{{i.type}}" ng-if="$index == 1">
    ...
  </div>
  <div square class="set-holder {{i.class}}" droppable="{{i.type}}" ng-if="$index > 1">
    ...
  </div>
</div>

它有点冗长,但很好地将模板分开,这样你就可以让它们相互独立。

答案 3 :(得分:1)

<!-- Here is a code sample which I used in one of my angularjs ionic apps.  -->
<!-- Regular ng-repeat -->
<!-- ng-if="$first" to determine <input focus-input> or not -->
<ion-item class="item item-input item-stacked-label" ng-repeat="input in template.inputs">
  <label class="input-label bh-dark" for="{{input.id}}">{{input.title}}</label>
  <div class="clearfix">
    <div class="bh-left">
      <input ng-if="$first" focus-input id="{{input.id}}" type="{{input.type}}" placeholder="{{input.choices[0]}}" ng-model="input.answer">
      <input ng-if="!$first" id="{{input.id}}" type="{{input.type}}" placeholder="{{input.choices[0]}}" ng-model="input.answer">
    </div>
    <div class="bh-right">
      <i class="icon ion-ios-close-empty bh-icon-clear" ng-click="clearField(input.id)" ng-show="input.answer"></i>
    </div>
  </div>
</ion-item>