Angular Child Scope值没有正确绑定

时间:2015-03-01 11:20:46

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

我正在编写一个角度应用程序,我需要将值绑定到某个子范围。 在控制器中,我有:

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属性增加了。

那么我忽略了缺少的部分是什么?

1 个答案:

答案 0 :(得分:1)

在构思中存在问题。无论你所包含的模板中的内容是什么,都不应该尝试访问外面的内容。你应该使用一个指令。

我不是100%肯定,但我认为ng-include创造了另一个范围。因此,主视图中发生的任何修改都不会报告给您包含的模板,因为新范围中的值未被更改。

编辑:

如果从摘要外部调用函数(例如在传递给第三方库的回调中,在setTimeout函数中调用),则视图将不会更新,因为angular无法知道值已有在那种情况下,你必须用$ scope。$ apply()调用来包围你的电话。