2013-10-09 101 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類,謝謝。 –