在视图中更新Angular变量

时间:2014-12-21 14:34:25

标签: angularjs angularjs-scope angularjs-ng-repeat

我希望我的输出读取

0
01
012
0123
01234
etc...

我期待我编写的这个简单代码可以解决这个问题,而是打印

01111111111 011111111111
02222222222 022222222222
03333333333 033333333333
04444444444 044444444444
05555555555 055555555555
06666666666 066666666666

为什么会这样?

这是我的Angular代码:

<div ng-app="App" ng-controller="ctrl">
     <div ng-repeat="num in [1, 2, 3, 4, 5, 6]">
         <label>{{previousNumber}}</label>
         {{previousNumber = (previousNumber + "" + num)}}
     </div>
</div>

这是JSFiddle: http://jsfiddle.net/fd1f6yso/2/

1 个答案:

答案 0 :(得分:1)

当你同时$watch - {{previousNumber}} - 并且对表达式previousNumber的每次评估都修改{{previousNumber = (previousNumber + "" + num)}}时,你会进入一个无限循环 - Angular在10之后会阻止迭代$digest

要实现您想要的目标,您需要在ng-repeat的外部范围内使用变量来保持增加的字符串,并在每个ng-repeat的子(内部)范围内使用局部变量使用ng-init

创建的迭代
<div ng-init="label = ''">
    <div ng-repeat="num in [1, 2, 3, 4, 5] track by $index" 
         ng-init="$parent.label = $parent.label+''+num; thisLabel = $parent.label">
        <label>{{thisLabel}}</label>
    </div>
</div>

由于文字的原型继承如何运作,您需要使用$parent.label(而不是label)。

应该注意的是,虽然这对于智力锻炼来说是好的,但我不建议在实际开发中使用它。

fiddle