我有一些工厂:
.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的实际缺乏了解。如果有人问我,我会告诉他这就像是观察者的好模式。这是一个恰当的解释吗?
答案 0 :(得分:6)
这不是观察者模式。使用观察者模式,观察对象在其变化时明确地通知其观察者。
AngularJS监视机制比较处理事件之前和之后表达式的评估结果,如果表达式的值发生了变化,它会通知观察者。如果观察者执行导致表达式值再次被更改,则再次调用观察者等,直到达到10个周期的限制。
$scope documentation中解释了这一点。