Я учусь угловато и пытаюсь понять, как работают службы и область действия. У меня есть следующий plnkr, который является меню off/on canvas (http://plnkr.co/edit/wP1Fu6vlJiopJi5AzkQt).Переменные службы Angularjs не обновляются должным образом
Я попытался разделить контроллеры. Я определяю логические переменные, называемые navLeft & navRight в сервисе call navState. Я использую левое и правое навигационные меню под одним ctrl под названием «navCtrl» и холст (содержимое &) под «canvasCtrl». Обе функции контроллеров принимают $ scope и navState в качестве входных данных.
Классы применяются на холсте и применяются navMenu на основе этих булевых выражений для имитации меню холста.
У меня 2 вопроса:
Вопрос 1: Когда левая кнопка переключения нажата, navLeft сделан верно. Это обновляет navLeft в canvasCtrl, но не navCtrl. Используя угловой способ, как я могу обновить состояния navCtrl, navLeft/navRight, когда он изменен в canvasCtrl?
Вопрос 2: При использовании угловых сервисов можно напрямую с контроллера обновлять служебные переменные (navState), которые затем передают новые состояния на оба контроллера с помощью службы (т.е. canvasCtrl, navCtrl) , Это угловой способ делать что-то?
Цените все комментарии, заблаговременно.
JS кода ниже:
var app = angular.module("plunker",[]); //include modules for animation, on/off navmenu
app.controller('mainCtrl', function($scope){
//Main Json Files/data to go here
});
app.service('navState',function(){
this.navLeft= false; //default navLeft menu off
this.navRight=false; //default navRight menu off
});
app.controller('navCtrl',function($scope,navState){
$scope.navLeft = navState.navLeft;
$scope.navRight = navState.navRight;
});
app.controller('canvasCtrl', function($scope,navState){
$scope.navLeft = navState.navLeft;
$scope.navRight = navState.navRight;
$scope.navClick=function(){ //changes class of canvas when navRight or navLeft value change
if ($scope.navLeft== true){
$scope.navRight = false;
return ("canvas-off-left");
}
else if ($scope.navRight== true){
navState.navLeft = false;
return ("canvas-off-right");
}
else{
return("canvas-on"); //if both right and left menu false, use default canvas-on style ie width 100%
}
};
});
Спасибо за внимание. Однако {{navLeft}} в меню div class = "navLeft" все еще не обновляется до true вместе с canvasCtrl. Вот где он говорит: NavLeft Scope от navCtrl VALUE = {{navLeft}}. Вы знаете, почему это так? Причина, по которой ему это нужно, - это то, что последующий ng-show работает в списке ul. –
@KaTech, извините, я не добавил ссылку в плункер. Пожалуйста, посмотри сейчас. –
Это работает! Вы чемпион, это меня сбило с ума, так ценили, спасибо !!!! –