更新时间:2022-12-29 09:59:17
您应该将所有数据都包含在某个服务中,以便在更改时通知任何侦听器.编辑 这是一个 jsBin 演示此方法
You should have the data all contained in some service that notifies any listeners when it is changed. Edit Here is a jsBin demonstrating this method
观察者模式对这个有好处:
The observer pattern would be good for this one:
app.factory('MapService', function() {
var observerCallbacks = [];
var markers = [];
var publicMembers = {
addMarker: addMarker,
getMarkers: getMarkers,
registerObserverCallback: registerObserverCallback
}
function addMarker (marker) {
markers.push(marker);
notifyObservers();
};
function getMarkers() {
return markers;
}
function registerObserverCallback(callback){
observerCallbacks.push(callback);
};
function notifyObservers(){
angular.forEach(observerCallbacks, function(callback){
callback();
});
};
return publicMembers;
});
然后在您的控制器中,您可以注入此服务,注册为观察者,并且任何时候通知观察者(例如,在 addMarker
中,您的回调将被执行:
And then in your controller you can can inject this service, register as an observer, and any time observers are notified (e.g., in addMarker
, your callback will be executed:
app.controller('MyController', function($scope, MapService) {
MapService.registerObserverCallback(function() {
$scope.markers = MapService.getMarkers();
});
});