且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

我应该如何处理控制器之间的函数调用?

更新时间: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();
    });
});