#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 вы можете обернуть фабрику, а затем внедрить в свои контроллеры