Всем привет
Интересует вопрос взаимодействия "несвязанных" друг с другом контроллеров. Упрощенный пример верстки:
<div ng-controller="Controller1" ng-scope>
... some
</div>
...
<div ng-controller="Controller2" ng-scope>
... some
</div>
Насколько я понимаю, "по-феншую" в ангуляре для взаимодействия контроллеров я должен использовать "объект-посредник":
angular
.module( 'app', [])
.factory( '$mediator', function() {
return { /* code */ };
})
.controller( 'Controller1', function( $scope, $mediator ) {
var model = $scope.model = {};
})
.controller( 'Controller2', function( $scope, $mediator ) {
var model = $scope.model = {};
});
Я и не против.
В чем проблема: приходится периодически обмениваться сообщениями/данными одному контроллеру с другим или наоборот. Для этих целей создаю изолированный scope и использую его реализацию подписки на события и поджиг событий. Выглядит это так:
angular
.module( 'app', [])
.factory( '$mediator', function( $rootScope ) {
return $rootScope.$new( true ); // isolate
})
.controller( 'Controller1', function( $scope, $mediator ) {
var model = $scope.model = {
field: null
};
// subscribe to event
$mediator.$on( 'my:event', function( event, data ) {
// ...
});
})
.controller( 'Controller2', function( $scope, $mediator ) {
var model = $scope.model = {
field: null
};
// fire event
$mediator.$emit( 'my:event', 'data' );
});
Работает, но: поджиг события в изолированном scope ($mediator) вызывает пересчет обработчиков всего приложения при данной реализации, а этого хотелось бы избежать.
Кто-что думает на этот счет? Возможно, все проще, чем кажется
Только не надо предлагать для обмена событиями обещания. Они, насколько мне известно, "одноразовые".
Спасибо )