Angular在元素的范围内保存一个值

时间:2015-01-22 09:08:43

标签: javascript jquery angularjs

我想将值存储在html DOM元素的范围内。这是我的问题。
我有一个JSON对象数组。迭代数组并创建div。

 <div data-ng-repeat="student in students">
 {{student.address}}  
  //if student.address equals previous student address, then
   <div class="newStyle"> </div>
 </div 

当迭代数组时,如果一个学生的地址值等于前一个地址,那么下面的div应该有一个新的样式。
我的方法是解决这个问题,即保留学生的地址,在迭代时,学生地址存储在变量(非全局)中,在下一次迭代中,新学生的地址将根据先前设置的地址进行检查。

请让我知道在迭代范围内可以保留值的任何方式。

4 个答案:

答案 0 :(得分:2)

您可以使用$index变量,它是重复元素的迭代器偏移量,(0..length-1):

 <div data-ng-repeat="student in students">
  //if student.address equals previous student address, then
   <div data-ng-class="{newStyle: student.address === students[$index-1].address}"> </div>
 </div 

请注意,您还可以使用ng-class,如果给定的条件为真,student.address === students[$index-1].address将帮助您自动添加类名。

答案 1 :(得分:1)

有一个名为$ index的东西,它将保存当前的迭代次数,你可以使用它。

$ index将具有当前循环计数

<强> student.address ==学生[$索引-1]。地址

<div data-ng-repeat="student in students">
 {{student.address}}  
  <div ng-if="student.address==students[$index-1].address">
   <div class="newStyle"> </div>
  </div>
 </div>

答案 2 :(得分:1)

使用$index可以在迭代时比较值。

   <div data-ng-repeat="student in students">
     {{student.address}}  
      //if student.address equals previous student address, then
       <div ng-class="{newStyle:students[$index-1].address == students[$index].address}"> </div>
     </div

答案 3 :(得分:1)

如果学生的地址等于之前的学生地址,您可以使用控制器中的某个功能来应用新的样式。


在你的控制器中定义一个包含地址的变量和一个检查重复地址的函数:

var student = "";
$scope.checkAddr=function(param){
student=param;
if(student==param){
return "newStyle";
}

并在您的模板中:

<div data-ng-repeat="student in students">
 {{student.address}}  
  //if student.address equals previous student address, then
   <div ng-class="checkAddr(students[$index].address)"> </div>
 </div