0

必要なことを正しい方法で行っているかどうかわかりません...コントローラーが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 は発生しません。私はどこで間違っていますか?それを行うより良い方法はありますか?

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 に答える