当前位置: 首页 > 面试题库 >

如何在ng-repeat中使用$ index启用类并显示DIV?

严修诚
2023-03-14
问题内容

我有一组<li>要素。

<ul>
  <li ng-class="{current: selected == 100}">
     <a href ng:click="selected=100">ABC</a>
  </li>
  <li ng-class="{current: selected == 101}">
     <a href ng:click="selected=101">DEF</a>
  </li>
  <li ng-class="{current: selected == $index }" 
      ng-repeat="x in [4,5,6,7]">
     <a href ng:click="selected=$index">A{{$index}}</a>
  </li>
</ul>

当用户单击上方的地址元素之一时,则应设置selected的值并显示<DIV>以下元素之一:

<div  ng:show="selected == 100">100</div>
<div  ng:show="selected == 101">101</div>
<div ng-repeat="x in [4,5,6,7]" ng:show="selected == $index">{{ $index }}</div>

这适用于前两种情况。

  • 当用户单击ABC时,第一个<DIV>显示100,然后将颜色更改为红色。
  • 单击DEF后,将显示101,DEF变为红色。

但是,它对于A0,A1,A2和A3完全不起作用

  • 当用户单击A0,A1,A2或A3时,不会显示正确的值,未设置所选值,并且所有ng-repeat A0,A1,A2和A3的颜色都变为红色。

如果您查看此柱塞,则可以最好地显示:

http://plnkr.co/edit/7HMeObplaBkx5R0SntjY?p=preview

请注意,在顶部,我已在顶部添加{{ selected }}了调试辅助工具。另外,x in [4,5,6,7]只是用来模拟循环。在现实生活中我有这样的想法ng-repeat="answer in modal.data.answers"

有谁知道我该如何进行设置,以便li在正确的时间设置班级电流,并DIV在正确的时间为A0,A1,A2和A3 <li>以及<DIV>


问题答案:

这里的问题是ng- repeat创建自己的范围,所以当您执行selected=$index此操作时,将selected在该范围内创建一个新的属性,而不是更改现有属性。要解决此问题,您有两种选择:

将选定的属性更改为非原始属性(即对象或数组,使html" target="_blank">javascript查找原型链),然后在其上设置一个值:

$scope.selected = {value: 0};

<a ng-click="selected.value = $index">A{{$index}}</a>

plnkr

要么

使用$parent变量访问正确的属性。虽然不建议使用,因为它会增加示波器之间的耦合

<a ng-click="$parent.selected = $index">A{{$index}}</a>

plnkr



 类似资料:
  • 我有一套<代码> 当用户单击上面的一个地址元素时,应设置所选的值并显示其中一个<代码> 这适用于前两种情况。 当用户单击ABC时,第一个<代码> 然而,它根本不适用于A0、A1、A2和A3 当用户单击A0、A1、A2或A3时,则不会显示正确的值,不会设置所选值,并且所有ng重复A0、A1、A2和A3的颜色变为红色 如果你看这只扑克牌,这是最好的展示: http://plnkr.co/edit/7H

  • 问题内容: 我想问你是否可以帮我这个忙。 我在这里用我的问题创建了一个jsfiddle 。我需要使用ng-model =“ my _ {{$ index}}”方式在ng-repeater中动态生成一些带有ng-model的输入。 在jsfiddle中,您可以看到一切正常,直到我尝试动态生成它为止。 HTML将是: 还有javascript … 你能给我个主意吗? 非常感谢。 问题答案: 它能解决您

  • 我试图以正确的顺序显示特定JSON的值。我的JSON看起来像: 如何使用ng repeat显示值: 比如: 英语字母表中第一个字母 安德里亚 苹果ˌ家伙 B. 婴儿 巴厘岛 英语字母表中第三个字母 蜡烛 加拿大

  • 问题内容: 我正在开发一个页面,我需要在其中显示一些框(使用),其中包含频道信息以及显示位置(城市)。 我面临的问题是当我重复第二遍时: 这应该获得第一个ng-repeat的$ index值,并使用显示频道的位置创建一个新数组。它确实做到了。但是,当我使用此数组应用第二个ng- repeat时,它无法正常工作。 说我的html看起来像这样(PS:我需要使用索引值而不是因为我将这些框放到列中) JS

  • 问题内容: 我想在Angular中使用ng-repeat,而我只想输出数组的某些元素。一个例子: 但是,这不起作用。请告诉我该怎么做;仅输出元素的精确索引。 问题答案: 在您的代码中,过滤器应用于“ items”数组,而不是应用于每个数组项,这就是为什么它无法按预期工作的原因。 相反,您可以使用ng-show(或ng-if): 请参阅:http://jsfiddle.net/H7d26 编辑:如果

  • 问题内容: 我正在尝试创建一个应用程序,用户可以选择不同类型的块并将它们堆叠在一起以创建唯一的模板。 由于我希望用户能够多次将相同的块添加到模板中,因此我必须使用“ track by $ index”来完成此操作: 但是,当我尝试使用ng- animate添加动画时,用于删除块的动画是在模板中的最后一块而不是remove块上进行动画处理。我将代码放在jsfiddle的http://jsfiddle