AngularJs ng-repeat track by $ index问题与angular-bootstrap-switch

时间:2018-07-13 07:44:12

标签: javascript angularjs angularjs-ng-repeat angular-bootstrap bootstrap-switch

我遇到AngularJs ng-repeatangular-bootstrap-switch的问题

我正在使用:

ng-repeat="item in items track by $index"

当我通过以下方式将新项添加到数组的第一个索引中时:

newItem = {};    
items.splice(0, 0, newItem);

DOM包含一个bs-switch: enter image description here 添加新项目后,它会根据$ index重用数组中的第一个元素,因此不会重新呈现(that's what I get from this docs)。我遇到的问题是上一个元素具有开机

我遇到的DOM效果问题是“ 开机”类在新项目上没有刷新,并且一直存在。

预期:在这种情况下,我要关闭,而不是像图像一样打开。因为它是一个空对象

P / s:业务原因

  • 我无法为该 Switch 添加默认值。它必须是一个空对象

  • 我也无法使用item对象的任何标识符来跟踪替换为$ index

  • 如果我通过$ id使用默认轨道,也会引起一些业务问题

在Angular 1.5或更高版本上工作的温度解决方案:

角度为1.5时,您可以使用angular-bootstrap-switch 0.5.1

在frapontillo发布更改后,它将解决此问题:“ 在模型更改时进行“开关更改”触发

非常感谢您的支持。

1 个答案:

答案 0 :(得分:0)

我从您的问题中看到的是,您想向主数组添加一个新项目,并且在其呈现时,您希望默认情况下将其切换为关闭

您需要牢记一些事情。

  1. ng-repeat在我们的DOM中仅表现为循环。

  2. 如果要默认关闭电源,则必须在主阵列的每个项目中都有一个模型。它将跟踪DOM中每个开关的状态。

这是您应该尝试的

在您的控制器上:

newItem = {switchState: 0};    
items.splice(0, 0, newItem);

通过您的HTML:

<div ng-repeat="item in items track by $index">
<!-- your Name and Decription input fields.. -->

<input
    bs-switch
    ng-model="item.switchState" />

所以我认为您忽略了ng-model导致您出现问题的角度引导开关。