AngularJS - $ scope的机制。$ watch - 它只是一个观察者模式吗?

时间:2014-03-07 22:56:12

标签: angularjs angularjs-scope angularjs-service angularjs-controller

我有一些工厂:

.factory("someFactory", function() {

  var someFactory = {};

  someFactory.objects = [
    { name: "obj1" },
    { name: "obj2" }
  ];

  return someFactory;
}

还有一些控制器可以监视这家工厂对象名称的变化:

.controller("someController", ["someFactory", "$scope", function($scope, someFactory) {

  for (var i = someFactory.values.length - 1; i >= 0; i--) {
    $scope.$watch("someFactory.values[" + i + "].name", function(newVal, oldVal, scope) {
        if(newVal !== undefined) {
            // do something
        }
  });

}]);

我很惊讶这实际上是有效的,我不必单独为我工厂中的每个对象编写代码。我想我很惊讶,因为我对$ scope的实际缺乏了解。如果有人问我,我会告诉他这就像是观察者的好模式。这是一个恰当的解释吗?

1 个答案:

答案 0 :(得分:6)

这不是观察者模式。使用观察者模式,观察对象在其变化时明确地通知其观察者。

AngularJS监视机制比较处理事件之前和之后表达式的评估结果,如果表达式的值发生了变化,它会通知观察者。如果观察者执行导致表达式值再次被更改,则再次调用观察者等,直到达到10个周期的限制。

$scope documentation中解释了这一点。