Почему мы используем трансляцию $rootScope.$ В AngularJS?
Пытался найти основную информацию для AngularJS $rootScope.$broadcast
, Но документация AngularJS не сильно помогает. Проще говоря, почему мы используем это?
Кроме того, в шаблоне Hot Towel Джона Папы в общем модуле есть пользовательская функция с именем $broadcast
:
function $broadcast() {
return $rootScope.$broadcast.apply($rootScope, arguments);
}
Я не понял, что это делает. Итак, вот пара основных вопросов:
1) Что $rootScope.$broadcast
делать?
2) В чем разница между $rootScope.$broadcast
а также $rootScope.$broadcast.apply
?
5 ответов
Что значит
$rootScope.$broadcast
делать?$rootScope.$broadcast
отправляет событие через область приложения. Любая дочерняя область этого приложения может поймать его с помощью простого:$scope.$on()
,Особенно полезно отправлять события, когда вы хотите достичь области, которая не является прямым родителем (например, ветвь родителя)
!!! Однако не следует использовать одну вещь.
$rootScope.$on
от контроллера.$rootScope
это приложение, когда ваш контроллер уничтожен, этот прослушиватель событий все еще будет существовать, а когда ваш контроллер будет создан снова, он просто соберет больше слушателей событий. (Таким образом, одна трансляция будет перехвачена несколько раз). использование$scope.$on()
вместо этого, и слушатели также будут уничтожены.В чем разница между
$rootScope.$broadcast
&$rootScope.$broadcast.apply
?Иногда вы должны использовать
apply()
особенно при работе с директивами и другими библиотеками JS. Однако, поскольку я не знаю эту кодовую базу, я не смогу сказать, так ли это здесь.
$rootScope
в основном функционирует как прослушиватель событий и диспетчер.
Чтобы ответить на вопрос о том, как он используется, он используется в сочетании с rootScope.$on
;
$rootScope.$broadcast("hi");
$rootScope.$on("hi", function(){
//do something
});
Тем не менее, это плохая практика $rootScope
как общая служба событий вашего приложения, поскольку вы быстро окажетесь в ситуации, когда каждое приложение зависит от $ rootScope, и вы не знаете, какие компоненты прослушивают какие события.
Рекомендуется создавать сервис для каждого пользовательского события, которое вы хотите прослушать или транслировать.
.service("hiEventService",function($rootScope) {
this.broadcast = function() {$rootScope.$broadcast("hi")}
this.listen = function(callback) {$rootScope.$on("hi",callback)}
})
$rootScope.$broadcast - это удобный способ вызвать "глобальное" событие, которое могут прослушивать все дочерние области. Вам нужно только использовать $rootScope
передать сообщение, так как все области потомка могут его прослушать.
Корневая область транслирует событие:
$rootScope.$broadcast("myEvent");
Любой ребенок Scope может прослушать событие:
$scope.$on("myEvent",function () {console.log('my event occurred');} );
Почему мы используем $ rootScope. $ Broadcast? Ты можешь использовать $watch
прослушивать изменения переменных и выполнять функции при изменении состояния переменных. Однако в некоторых случаях вы просто хотите вызвать событие, которое могут прослушивать другие части приложения, независимо от каких-либо изменений в состоянии переменной области. Это когда $broadcast
полезно
Передача данных!!!
Интересно, почему никто не упомянул, что $broadcast
принять параметр, где вы можете передать Object
что будет получено $on
используя функцию обратного вызова
Пример:
// the object to transfert
var myObject = {
status : 10
}
$rootScope.$broadcast('status_updated', myObject);
$rootScope.$on('status_updated', function(event, obj){
console.log(obj.status); // 10
})
Что делает $rootScope.$ Broadcast?
Он передает сообщение соответствующим слушателям по всему угловому приложению, очень мощное средство для передачи сообщений в области на другом иерархическом уровне (будь то родитель, потомок или братья и сестры)
Аналогично, у нас есть $rootScope.$ Emit, единственное отличие состоит в том, что первое также перехватывается $ scope. $ On, а второе - только $rootScope.$ On.
см. примеры: - http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/