AngularJS控制器通信

时间:2013-10-09 10:21:41

标签: angularjs angularjs-scope angularjs-controller

我不确定我是否以正确的方式做我需要的东西......我有2个控制器:

SiteMenuCntl DashboardCntl

SiteMenuCntl绑定到UL标记,它是网站的菜单。默认情况下它是隐藏的,并且在凭据验证和加载DashboardCntl之后,菜单应该是可见的。

我试过了:

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永远不会被解雇。我哪里做错了?有没有更好的方法呢?

2 个答案:

答案 0 :(得分:1)

我猜你的SiteMenuCntlDashboardCntl的范围树下,所以当$emit向上触发(向$rootScope)时,它不会到达{{ 1}}。

请尝试使用SiteMenuCntl。这会从树的顶部向下触发任何监听范围。

答案 1 :(得分:0)

有一种更简单的方法可以做到这一点;

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

然后在你的HTML中你去;

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