2016-10-20 10 views
0

divにポップアウトメニューがあります。コードを複製しないでDivを隠す

divの開閉は、ng-click="showNavMenu = !showNavMenu"を使用して制御しています。

ただし、私がこれを使用するリンクごとに、新しいビューが読み込まれると、メニューが実際に閉じるようにそのコードを複製する必要があります。

私は、このコードの重複を避けるしたいのですが - 私は何ができるか上の任意のアイデア:

<div class="navMenu" ng-show="showNavMenu"> 
     <ul> 
     <li><a href="/about" ng-click="showNavMenu = !showNavMenu">About</a></li> 
     <li><a href="/privacy" ng-click="showNavMenu = !showNavMenu">Privacy</a></li> 
     <li><a href="/contact" ng-click="showNavMenu = !showNavMenu">Contact Us</a></li> 
     </ul> 
</div> 

答えて

0

利用機能の代わりに <li><a href="/about" ng-click="toggleMenu()">About</a></li>

をし、コントローラにこの関数を定義

$scope.toggleMenu = function() { 
    $scope.showNavMenu = !$scope.showNavMenu; 
} 
+0

しかし、私はまだ、各 'NG-click' – userMod2

+0

に時々コードはより冗長であることを言及する必要があるだろうと推定します私たちは欲しいです。ブートストラップのようなツールを使用すると、このような低レベルのコードを作成する必要がなくなります – Mikkel

+0

はい、ただし、コールバックを一度だけ定義し、要件が変更されたときにこの動作を1回変更する必要があります。 'ng-repeat'を使用すると、hrefの定義と同様の方法ですべての 'li'がレンダリングされますか? – VadimB

0

ng-clickを親に置くのはどうですか?ul?私は、角度のイベントのバブリング/伝播のルールに精通していないので、関数やng-click属性にいくつか修正が必要な場合があります。それとも、うまくいくかもしれません。

function toggleMenu() { 
    $scope.showNavMenu = !$scope.showNavMenu 
} 

----- 

<ul ng-click="toggleMenu()"> 
0

ナビゲーションロジックをコントローラコードに移動すると、私にとっては最もクリーンな解決策になります。

​​

そして、あなたのコントローラ内部:だからあなたのマークアップは次のようになり

$scope.navigate = function(path) { 
    $scope.showNavMenu = false; 
    window.location.href = '/' + path; //better navigate via router 
} 
関連する問題