AngularJS中控制器和工厂之间的绑定

时间:2016-02-16 18:59:09

标签: javascript angularjs binding timeout

我想了解boundJS中的绑定是如何工作的。 我试图尽可能简单地创建代码来向您展示mu问题。 我知道如何使用它,但我不知道它是如何工作的。

这是我的例子。在其中我有3个范围变量:  Plunker

<pre>{{A}}</pre>
<pre>{{B}}</pre>
<pre>{{C()}}</pre>

这些定义如下:

  $scope.A = factory;
  $scope.B = factory.a;
  $scope.C = function() {
    return factory.a.b;
  };

名为“factory”的工厂返回此对象:

    a: {'b': 'foo'}

超时以这种方式更新工厂:

  $timeout(function() {
    factory.a = {
      'b': 'BOO'
    }
  }, 1000);

我想问一下,是否有人能够清楚地回答为什么只有第一个(A)和第三个(C)在超时后更新而不是第二个。

1 个答案:

答案 0 :(得分:0)

案例B 没有变化,因为$scope.B没有变化。

  factory.a = {b: 'foo'};
  $scope.B = factory.a;

  $timeout(function() {
    factory.a = {'b': 'BOO'};
  }, 1000);

$timeout函数更改factory.a时,$scope.B仍然指向上一个对象{b: 'foo'}

案例A 更改,因为$scope.A内容发生了变化。

  $scope.A = factory;

即使名为factory的对象引用没有改变,引用的内容也会发生变化。

案例C 会发生变化,因为函数的返回值会发生变化。

  $scope.C = function() {
    return factory.a.b;
  };

每个摘要周期,AngularJS框架都会评估函数并通过任何更改来更新DOM。