$rootScope和$rootScope之间的区别是什么$在AngularJS中发射/$broadcast



这是我的页面结构。

// app.html
<wrapper ng-if="initialized && $root.user.type!='guest'">
<header-component></header-component>
<div class="app-body">
<sidebar-component></sidebar-component>
<main class="main-content" style="height:{{$root.pageHeight}}px; overflow-y: scroll">
<ng-view></ng-view>
</main>
<aside-component></aside-component>
</div>
</wrapper>

现在,在ng-view指令中,我有一个控制器,它需要将数据传递给头组件。正如您所看到的,ng视图并没有以某种方式与头组件相关联。

假设ng视图控制现在的屏幕是:

// some-screen.js
$scope.foo = "bar";

我想在标题中显示bar

我可以使用$rootScope(没有任何事件(或使用$broadcast事件来完成这两项操作。

第一种方法-使用$rootScope-按原样-没有任何东西:

// some-screen.js 
$rootScope.foo = "bar";
// header.js 
app.directive("headerComponent", ($rootScope) => {
return {
templateUrl: "/structure/header/header.html",
scope: {},
link: function($scope, element, attrs) {
console.log($rootScope.foo) // "bar"
}
}
});

第二种方法-使用$broadcast事件

// some-screen.js 
$rootScope.$emit("SomeNameOfTheEvent", $scope.foo);
// header.js 
app.directive("headerComponent", ($rootScope) => {
return {
templateUrl: "/structure/header/header.html",
scope: {},
link: function($scope, element, attrs) {
$rootScope.$on("SomeNameOfTheEvent", function(event, info) {
console.log(info.foo) // "bar"
});
}
}
});

现在在使用$broadcast事件时注意两件事:

  1. 您需要指定此事件的名称-在大型应用程序中,这可能很棘手-因为你可能不会记住你在编码时抛出的名字。坐着想着好名字是浪费时间。您可能需要制作一份文档,以便重用其他地方的事件名称在应用程序中-否则你会错误地尝试使用相同的事件,但使用了错误的名称。

  2. 它们都在做同样的事情——$broadcast只是需要更多的代码才能发挥作用。

我缺少什么,AngularJS可能为某个东西创建了$broadcast事件。

$emit向上分派事件$广播调度事件向下

详细解释

$rootScope.$emit只允许其他$rootScope侦听器捕获它。当你不希望每个$scope都能捕获它时,这很好。大多数情况下是高级通信。把它想象成成年人在一个房间里互相交谈,这样孩子们就听不见了。

$rootScope.$broadcast是一种让几乎所有人都能听到的方法。这相当于父母大喊晚餐已经准备好了,所以家里的每个人都能听见。

$scope.$emit是希望$scope及其所有父级和$rootScope听到事件的时间。这是一个孩子在家里向父母抱怨(但不是在其他孩子能听到的杂货店(。

CCD_ 8用于CCD_ 9本身及其子代。这是一个孩子对着毛绒玩具窃窃私语,这样他们的父母就听不见了。

最新更新