2017-02-05 18 views
1

Я использую часы для сохранения состояний в подменю.Часы AngularJs в контроллере меню

В меню у меня есть:

$scope.$watch('$stateParams.colonyId', function(newVal, oldVal) { 
... 
} 

Он работал раньше - не больше. Он не выдает никаких ошибок и newVal и oldVal не определены. Зачем?

ответ

1

Вы можете попробовать тонный впрыснуть $state в контроллер и использовать $watch на $state.params

$scope.$watch(function() { 
    return $state.params.colonyId; 
}, function (newVal, oldVal) { 
    if (newVal !== oldVal) { 
     alert('Value changed !'); 
    } 
}); 
+0

Да, это работает, спасибо –

+0

Nice, вы можете затем подтвердите свой ответ. И не стесняйтесь также повышать :-) – Merlin

0

Причина, почему она не будет работать потому, что $stateParams обслуживание не на вашем $scope объекта. Обозначение $scope.$watch("someProperty",..) предполагает, что someProperty находится на вашем $scope объекте.

Чтобы исправить это либо зарегистрировать свою $stateParams службу на ваших $scope (Не рекомендуется!), Или изменить ваши часы, чтобы наблюдать функцию вместо:

$scope.$watch(function() { 
    return $stateParams.colonyId; 
}, function(newVal, oldVal) { 
    ... 
}