我在玩 Angularjs,可能我在滥用它。我正在使用分号在这样的角度表达式中包含多个语句(jsFiddle):
<tr ng-repeat="i in [1, 2, 3, 4]">
<td>i = {{ m = k; k = j; j = i + 1; i}}</td>
<td>j = {{j}}</td>
<td>k = {{k}}</td>
<td>m = {{m}}</td>
</tr>
起初,我认为在计算之前k
会有 的值,但显然它不是这样工作的。结果是:j
i+1
i = 1 j = 2 k = 2 m = 2
i = 2 j = 3 k = 3 m = 3
i = 3 j = 4 k = 4 m = 4
i = 4 j = 5 k = 5 m = 5
因此,显然分配j
tok
和k
tom
并不意味着值被复制,而是这些名称被绑定在一起。我可以理解。但是如果我删除显示k
(jsFiddle)值的行,就会发生一些奇怪的事情:
<tr ng-repeat="i in [1, 2, 3, 4]">
<td>i = {{ m = k; k = j; j = i + 1; i}}</td>
<td>j = {{j}}</td>
<td>m = {{m}}</td>
</tr>
我正在获得:
i = 1 j = 2 m =
i = 2 j = 3 m =
i = 3 j = 4 m =
i = 4 j = 5 m =
也就是说,m
不包含任何值,尽管它绑定到j
(通过k
)。这可能是因为k
它本身没有被评估。
我的问题是:这不是 AngularJS 中的错误吗?如果它在绑定链中,当然k
应该评估它,即使它没有直接显示。还是我误解了什么?
我知道这可能不是使用 AngularJS 的惯用方式,但我想真正了解表达式引擎,我无法解释这种行为。