angularjs-scope - AngularJS控制器的通信

  显示原文与译文双语对照的内容
97 1

我不确定我是否以正确的方式来做我所需要的。 我有 2个控制器:

英镑 SiteMenuCntl 和英镑 DashboardCntl

SiteMenuCntl绑定到UL标签,它是站点的菜单。 默认情况下它是隐藏的,在凭证验证之后,加载DashboardCntl时,菜单应该是 visibile 。

我试过这个:


app.controller('SiteMenuCntl', ['$scope', 'site', 'security', '$log', function ($scope, site, security, $log) {
 $scope.visibility ="hidden";
 $scope.$on('showTree', function () {
 console.log("event fired");//never fired :-(
 $scope.visibility ="";
 });
}]);

app.controller('DashboardCntl', ['$scope', function ($scope) {
 $scope.$emit('showTree');
}]);

但是事件showTree永远不会被激发。 我在哪里做错了? 有更好的方法来做?

时间: 原作者:

123 3

我猜你的SiteMenuCntlDashboardCntl的范围树上,因这里当 $emit 触发( 面向 $rootScope ) 时,它不会达到 SiteMenuCntl

尝试使用 $rootScope.$broadcast('showTree') 。通过任何侦听范围从树顶部向下触发。

101 5

有一种更简单的方法来做到这一点

为什么不在控制器中设置布尔 $scope.showSiteMenuCntl=false;,然后当你想要显示它时,为什么不设置 $scope.showSiteMenuCntl=true;

然后在你的html中,


<ul ng-controller="SiteMenuCntl" ng-show="showSiteMenuCtrl"></ul>

原作者:
...