Ich habe einen Controller für Menü und Controller für jede Ansicht. Was ich erreichen möchte, ist die active
Klasse zu dem Menüpunkt hinzufügen, so dass der aktive Menüpunkt visuell ausgewählt wird. Um dies zu erreichen, habe ich einen Servide erstellt, um den aktuellen Menüpunkt (Nummer) zu speichern. Hier ist meine Meinung.Wert wird nicht von anderen Controller über Service aktualisiert
body
div.menu(ng-controller="menuCtrl")
ul
li(ng-class="{selected: menuItem===0}")
a(href='#/')
i.material-icons.medium visibility
li(ng-class="{selected: menuItem===1}")
a(href='#/posts')
i.material-icons.medium library_books
li(ng-class="{selected: menuItem===2}")
a(href='#/categories')
i.material-icons.medium loyalty
span test {{menuItem}} // test menuItem variable
div.row-fluid
ng-view
Hier menuCtrl
Controller
app.controller('menuCtrl', ['$scope', '$http', 'global', '$interval', function($scope, $http, GLOBAL, $interval) {
$scope.menuItem = GLOBAL.menuItem;
}])
Wie Sie mich aus dem Dienst zu lokalen $scope
Variable binden Variable sehen können.
Und hier ist mein Service
app.factory('global', function($http) {
return {
menuItem: 0,
}
})
Dann in jedem View-Controller-I menuItem
wie diese eine Linie zu assing bestimmten Wert Dienstes hinzuzufügen:
app.controller('postsCtrl', ['$scope', '$http', 'global', '$location', function($scope, $http, GLOBAL, $location) {
// ...
GLOBAL.menuItem = 1;
// ...
}])
Das gleiche gilt für alle anderen View-Controller, so dass menuItem
ist 2,3,4, etc ..
Das Problem ist, dass selbst wenn es scheint, dass menuItem
Variable geändert wird, wenn ich c lick auf mehrere Menüpunkte, der Wert unter Menü (wo ich test comment) ist immer noch 0 und im Ergebnis nur der erste Menüpunkt active
Klasse.
Warum?
diese Antwort Ihre Frage nicht , aber ich würde Sie ermutigen, eine bestehende Lösung dafür zu verwenden, wie zum Beispiel [angular-ui-router-menus] (https://github.com/nitintutlani/angular-ui-router-menus). – damd