AngularJS如何在其指令中实现双向`'='`绑定

时间:2018-01-14 08:23:59

标签: angularjs angularjs-directive angular-digest two-way-binding

AngularJS如何通过引用在其指令中进行绑定?

有时当我使用'='中的directive通过引用传递变量,并更新parent controller中的引用变量时,它不会立即更新,但会在制作后更新$scope.$digest()

我认为angular不会像JS绑定那样进行引用绑定,但是当scope digest只更新其引用的变量时。

我不知道我的理论是否正确。

你觉得怎么样?

1 个答案:

答案 0 :(得分:0)

AngularJS $compile service通过添加观察者来实现双向'='绑定:

var parentValueWatch = function parentValueWatch(parentValue) {
  if (!compare(parentValue, destination[scopeName])) {
    // we are out of sync and need to copy
    if (!compare(parentValue, lastValue)) {
      // parent changed and it has precedence
      destination[scopeName] = parentValue;
    } else {
      // if the parent can be assigned then do so
      parentSet(scope, parentValue = destination[scopeName]);
    }
  }
  lastValue = parentValue;
  return lastValue;
};

parentValueWatch.$stateful = true;
if (definition.collection) {
  removeWatch = scope.$watchCollection(attrs[attrName], parentValueWatch);
} else {
  removeWatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);
}
removeWatchCollection.push(removeWatch);
     

— GitHib AngularJS compile.js Source Code

观察程序检查父作用域属性是否与isolate scope属性不同步,并根据需要进行更新。这意味着隔离范围仅在摘要周期后更新。