Обмен данными между контроллерами с использованием $broadcast
Для обмена данными между контроллерами обычно используется сервис.
Я обнаружил, что с помощью $rootScope.$broadcast
действительно удобно, если данные, которыми я должен поделиться []
или {}
,
Для меня преимущество использования широковещания заключается в том, что вам не нужно использовать watcher для проверки, загружены ли данные в сервис. Также меньше кода для записи.
Итак, мои вопросы:
- Можно ли использовать $broadcast?
- Есть ли неудобство при использовании $ трансляции
Вот несколько примеров использования обеих "техник", чтобы показать, что я имею в виду.
Пример использования $rootScope.$broadcast
// controller is registering 'list-loaded'
angular.module('myApp').controller(
'ControllerOne'
['$rootScope','$scope',
function ($rootScope, $scope) {
// the data
$scope.data = {
list : ["foo","bar"]
}
// sending the event with the data
$rootScope.$broadcast('list-loaded', { list: $scope.data.list });
}
]
);
//controller is listening for 'list-loaded'
angular.module('myApp').controller(
'ControllerTwo',
['$rootScope','$scope',
function ($rootScope, $scope) {
// empty data
$scope.data = {}
// when the event is received we set the data
$scope.$on('list-loaded', function(event, args) {
$scope.data.list = args.list;
});
}
]
);
Пример использования сервиса
// the service
angular.module('myApp').factory(
'Service',
[
function() {
// the data to be shared
var list = []
return {
setList : function(pList){
list = pList;
},
getList : function(){
return list;
}
};
}
]
);
//controller is setting list into Service
angular.module('myApp').controller(
'ControllerOne',
['$scope', 'Service',
function ($scope, Service) {
// setting the data to service
Service.setList(["foo","bar"])
}
]
);
//controller is getting list from Service
angular.module('myApp').controller(
'ControllerTwo',
['$scope','Service',
function ($scope, Service) {
// getting the data from service
$scope.data = {
list : Service.getList()
}
}
]
);