2016-10-20 5 views
0

Ich habe ein Pop-out-Menü in einem div.Verstecke eine Div ohne Duplizierung Code

Ich kontrolliere das Öffnen und Schließen des div mit: ng-click="showNavMenu = !showNavMenu".

Jedoch für jeden Link, wo ich dies verwende, muss ich diesen Code duplizieren, so dass das Menü tatsächlich schließt, sobald die neue Ansicht geladen ist.

Ich möchte diesen Code Doppelarbeit vermeiden - alle Ideen auf, was ich tun kann:

<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> 

Antwort

0

Verwenden Sie die Funktion statt <li><a href="/about" ng-click="toggleMenu()">About</a></li>

Und diese Funktion in der Steuerung definieren

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

Aber ich nehme ich noch zu erwähnen brauchen würde, um das in jedem 'ng-click' – userMod2

+0

Manchmal ist Code ausführlicher als wir würden gerne. Das Verwenden von Tools wie Bootstrap macht das einfacher, anstatt mit Low-Level-Code wie diesem zu geifern. – Mikkel

+0

Ja, aber Sie müssen Callback nur einmal definieren und dieses Verhalten auch nur einmal ändern, wenn sich die Anforderungen ändern. Wie wäre es mit 'ng-repeat', alle 'li' auf ähnliche Weise mit defferences in nur href zu rendern? – VadimB

0

Wie wäre es, wenn Sie den ng-Klick auf das übergeordnete Element setzen? ul? Ich bin nicht besonders versiert in den Event-Bubbling/Propagation-Regeln von eckle - es könnte einige Optimierungen geben, die Sie an Ihrer Funktion oder dem ng-click-Attribut vornehmen müssen. Oder es könnte einfach funktionieren.

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

----- 

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

ich mit der Bewegung des Navigationslogik auf den Controller-Code gehen würde, scheint die sauberste Lösung für mich.

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

Und in Ihrem Controller: So Ihr Markup aussehen würde

$scope.navigate = function(path) { 
    $scope.showNavMenu = false; 
    window.location.href = '/' + path; //better navigate via router 
} 
Verwandte Themen