2013-10-09 68 views
0

我不知道我在做什么,我需要在正确的道路......我有2个控制器:AngularJS控制器通信

SiteMenuCntlDashboardCntl

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

回答

1

我猜你的SiteMenuCntl下跌从DashboardCntl范围树,以便当$emit触发向上(朝向$rootScope),它并没有达到SiteMenuCntl

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

+0

谢谢,它的工作! –

0

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

为什么当你要显示它您去$scope.showSiteMenuCntl=true;

,然后在你的HTML你走你不设置在控制器的布尔$scope.showSiteMenuCntl=false;后;

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

因为showSiteMenuCtrl已经由DashboardCntl(当它加载)不SiteMenuCntl设置。 –

+0

好的,对不起。我想我没有读完整个问题,这是一个建议,虽然 – pythonian29033

+0

是的,我会用ng-show而不是控制一个css类,谢谢。 –