我正在编写一个角度应用程序,我需要将值绑定到某个子范围。 在控制器中,我有:
var addToStack = function(fallingItemOrder, scope) {
scope.model.stageChimneys[fallingItemOrder].Stack += 1;
return (scope.model.stageChimneys[fallingItemOrder].Stack === 3);
};
使用scope
$scope
引用$id=2
的位置(我猜它是2,因为它位于ng-view
指令下。)
主视图包含以下代码:
<ul class="chimneysUL">
<li ng-repeat="chimney in model.stageChimneys" ng-include="model.chimneyUrl"></li>
</ul>
ng-include
获取此子视图,该子视图使用不同的数据呈现5次:
<div class="chimney" id="{{chimney.LetterCode}}" data-order="{{$parent.$index}}">
<div class="pipeHead"></div>
<div class="pipeBody">
<table class="ulInsertedLetters">
<tr ng-repeat="i in model.getNumber(model.stackSize) track by $index" ng-class="3 - $index <= chimney.Stack ? 'showInserted' : 'hideInserted'">
<td>
<img class="insertedLetterImg" data-ng-src="{{'../../Images/Cards/rectangle.jpg'}}" />
</td>
</tr>
</table>
</div>
<div class="picContainer">
<img class="card" data-ng-src="{{chimney.PicName}}" />
</div>
</div>
所有绑定似乎都是正确的(例如chimney.LetterCode等..)
但是当addToStack执行时,{{chimney.Stack}}
保持不变。
正如我所理解的范围一样,如果父$id = 2
的父作用域的模型属性发生了变化,那么这些变化应该渗透到html视图中并立即反映出来。
事实上在调试中,我可以看到潜入$$childTail --> $$prevSibling
,烟囱对象的Stack属性增加了。
那么我忽略了缺少的部分是什么?
答案 0 :(得分:1)
在构思中存在问题。无论你所包含的模板中的内容是什么,都不应该尝试访问外面的内容。你应该使用一个指令。
我不是100%肯定,但我认为ng-include创造了另一个范围。因此,主视图中发生的任何修改都不会报告给您包含的模板,因为新范围中的值未被更改。
编辑:
如果从摘要外部调用函数(例如在传递给第三方库的回调中,在setTimeout函数中调用),则视图将不会更新,因为angular无法知道值已有在那种情况下,你必须用$ scope。$ apply()调用来包围你的电话。