0

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

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

4

2 回答 2

1

我猜你SiteMenuCntl在范围树的下方,DashboardCntl所以当$emit向上触发(朝向$rootScope)时,它不会到达SiteMenuCntl.

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

于 2013-10-09T10:38:12.490 回答
0

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

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

然后在你的html中你去;

<ul ng-controller="SiteMenuCntl" ng-show="showSiteMenuCtrl"></ul>
于 2013-10-09T10:26:40.337 回答