gpt4 book ai didi

AngularJS : How to watch service variables?

转载 作者:行者123 更新时间:2023-12-03 03:56:37 24 4
gpt4 key购买 nike

我有一项服务,请说:

factory('aService', ['$rootScope', '$resource', function ($rootScope, $resource) {
var service = {
foo: []
};

return service;
}]);

我想使用 foo 来控制以 HTML 呈现的列表:

<div ng-controller="FooCtrl">
<div ng-repeat="item in foo">{{ item }}</div>
</div>

为了让 Controller 检测 aService.foo 何时更新,我拼凑了这个模式,将 aService 添加到 Controller 的 $scope 中,然后使用 $scope.$watch():

function FooCtrl($scope, aService) {                                                                                                                              
$scope.aService = aService;
$scope.foo = aService.foo;

$scope.$watch('aService.foo', function (newVal, oldVal, scope) {
if(newVal) {
scope.foo = newVal;
}
});
}

这感觉有点冗长,我一直在使用服务变量的每个 Controller 中重复它。有没有更好的方法来完成监视共享变量?

最佳答案

如果您想避免 $watch 的专制和开销,您始终可以使用良好的旧观察者模式。

在服务中:

factory('aService', function() {
var observerCallbacks = [];

//register an observer
this.registerObserverCallback = function(callback){
observerCallbacks.push(callback);
};

//call this when you know 'foo' has been changed
var notifyObservers = function(){
angular.forEach(observerCallbacks, function(callback){
callback();
});
};

//example of when you may want to notify observers
this.foo = someNgResource.query().$then(function(){
notifyObservers();
});
});

在 Controller 中:

function FooCtrl($scope, aService){
var updateFoo = function(){
$scope.foo = aService.foo;
};

aService.registerObserverCallback(updateFoo);
//service now in control of updating foo
};

关于AngularJS : How to watch service variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com