Я пытаюсь вызвать событие из родительского контроллера, и дочерний контроллер должен его прослушать. Используя рамки углового события, есть два пути:
Способ 1
parentcontroller
$scope.$broadcast("eventToChild");
childController
$scope.$on("eventToChild",function({console.log("received event");})
Способ 2
parentcontroller
$rootScope.$emit("eventToChild");
childController
$rootScope.$on("eventToChild",function({console.log("received event");})
Я понимаю, что $rootscope.$emit
будет вызывать только слушателей на $rootscope
и мы можем остановить распространение события с помощью event.stopPropagation()
, учитывая этот факт, как $scope.$broadcast
$rootScope.$emit
будет лучшим решением, чем $rootScope.$emit
.
Какой из них является лучшим решением и почему?
Там нет лучшей разницы в производительности между ними. Но разница в его использовании.
$ broadcast используется для трансляции события вниз и $ emit используется для испускания события вверх.
Далее, вы ошибаетесь, говоря, что $ emit работает только с $ rootScope. Он также работает с $ scope.
Для получения дополнительной информации о них см. Различия здесь.
Они просто работают по-другому.
Широковещательная передача идет от элементов downards, к тому, кто пытается поймать событие; в случае корнеплодов каждая область видимости ниже, поэтому каждый может поймать ее и обработать; Хотя излучение - это способ увеличения охвата ребенка. Обычно, если вы хотите инициировать событие в параметрах условия/области, которые связаны с родителем, вы будете использовать широковещательную рассылку - в то время как если вы хотите использовать его с данными о ребенке, вы будете использовать emit.