У меня есть сервисная функция, которую мне нужно вызывать каждый раз, когда маршрут посещается или обновляется. Функция возвращает обещание Angular. Результат обещания необходимо загружать в область действия контроллера каждый раз при вызове функции.
В настоящее время я использую аргумент разрешения в определении состояния для вызова функции.
.state('app.theState', {
url: '/theRoute/:theRouteId',
views: {
'menuContent': {
templateUrl: 'templates/theRoute.html',
controller: 'TheRouteCtrl'
}
},
resolve: {theResolvedResult: function(theService){
return theService.theAsyncCall().then(function(result){
return result;
},function(errMsg){
return errMsg;
});}
})
Данные передаются в контроллер в качестве аргумента.
.controller( 'TheRouteCtrl', function($scope, $state, $log, theResolvedResult)
Я обновляю контроллер $scope в часах на глобальном уровне, который содержит ResolvedResult. (используя обходной путь, описанный в конце этого post). Я пробовал следить за самим спором, но он так и не сработал.
$scope.$state=$state;
$scope.$watch('$state.$current.locals.globals.theResolvedResult', function (result) {
$scope.aValue = result.aValue;
});
К сожалению, я предполагаю, что из-за того, что часы находятся в глобальном масштабе, часы срабатывают при запуске любого маршрута, а все остальные маршруты выдают ошибку для каждого маршрута, кроме того, где определено разрешение.
ionic.bundle.js:26794 TypeError: Cannot read property 'aValue' of undefined
at route_ctrl.js:234
Как я могу исправить эти ошибки, или есть лучший способ сделать это?