Я не могу обернуть голову вокруг этого, я действительно борюсь с ui-route
и $stateChangeSuccess
и $watch
, получил две проблемы. Я пытаюсь изменить значение параметра, когда я изменяю state
, щелкните URL-адрес. Я думаю, важно знать, что я использую суб-состояния. С моей текущей настройкой я получаю, что $stateChangeSuccess
запускает два раза при загрузке, то есть сразу устанавливает значение. То, что я пытаюсь сделать, это только установить его при изменении URL-адреса.
Мой маршрут выглядит так, я пытаюсь установить значение параметра
.state('medications', {
url: '/medications',
templateUrl: '/partials/home.html',
controller: 'mainController',
params: { showSection: false },
resolve: {
postPromise: ['medicationservice', function(medicationservice) {
return medicationservice.getAll();
}]
}
})
.state('medications.add', {
url: '/add',
templateUrl: '/partials/home.html',
controller: 'mainController',
params: { showSection: true },
})
в моем контроллере я получил следующее, где я установить параметр openSesame
в false
явно на init
, но, как описал, что он запускает и устанавливает его на true
.
mainModule.controller('mainController', [
'$scope',
'$state',
'$rootScope',
'medicationservice',
function($scope, $state, $rootScope, medicationservice) {
$scope.medication = {};
$scope.medications = medicationservice.posts;
$scope.openSesame = false;
$rootScope.$on("$stateChangeSuccess", function() {
$scope.openSesame = true;
console.log($scope.openSesame);
});
}]);
in my plunker изменение состояния работает один раз, то есть, если я использую $rootScope
.
Вы хотите изменить параметр 'showSection' при изменении состояния? – inspired
Да, в основном я хочу использовать параметр 'showSection' для установки' $ scope.openSesame' @inspired –
ok loot при моем обновленном ответе и [plunker] (https://plnkr.co/edit/zQxIhI6GKmKBY1bn4WSf?p=preview) – inspired