Выполнение «this» второго контроллера в первом контроллере через службу angular

#javascript #angularjs

#javascript #angularjs

Вопрос:

У меня есть два контроллера и служба, я выполняю первый контроллер «self / this» во втором контроллере. Я хотел знать, является ли это антипаттером или есть ли вероятность утечки памяти?

SelfService — эта служба хранит «это» контроллеров в объекте selfContainer.

Метод setSelf принимает два параметра — имя контроллера this / self и сам this / self . — он сохраняет их как пару ключ-значение в объекте selfContainer.

Метод executeWithSelf также принимает два параметра — имя this/self и обратный вызов. обратный вызов выполняется с параметром this/self в качестве параметра.

 angular.module('app')
.factory('SelfService', function () {
  var selfContainer = {};
  function setSelf (selfname , self) {
    selfContainer[selfname] = self;
  }
  function executeWithSelf (selfname, callback) {
    callback(selfContainer[selfname]);
  }
return {
    setSelf: setSelf,
    executeWithSelf: executeWithSelf
  };
});
  

FirstController

 angular.module('app').controller('FirstController', function(QueryService){
  var self = this;
  self.counter = 0;
  QueryService.setSelf('FirstController', self);
})
  

Второй контроллер

 angular.module('app').controller('SecondController', function(QueryService){
  var self = this;
//execute QueryService.executeWithSelf on any event and only after first controller has loaded
  QueryService.executeWithSelf('FirstController', function(firstcontrollerself){
    firstcontrollerself.counter  ;
  });
})
  

Комментарии:

1. Не уверен, что то, что вы делаете, является проблемой, но вы можете обеспечить связь между контроллерами с помощью других средств — scope.emit и scope.broadcast или службы агрегатора событий

2. @Banners спасибо за ваш отзыв, то, что он делал, было базовой службой агрегатора событий

3. также известный как pub / sub service — вот пример — github.com/phiggins42/bloody-jquery-plugins/blob/master /… идея заключается в том, что вы регистрируетесь для тем, вызывающих subscribe с обратным вызовом, а затем получаете уведомление, когда кто-то публикует в этой теме. В angular вы можете обернуть фабрику, а затем внедрить в свои контроллеры