Мой код:
/** * Создано maki1234 в 14.03.16. */
angular.module('admin', ['ngRoute'])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/all.html',
controller: 'mainController'
})
.when('/details/:id', {
templateUrl: 'views/details.html',
controller: 'detailsController',
resolve: {
id: function ($route, $q) {
var q = $q.defer();
var id = parseInt($route.current.params.id, 10);
if (!isNaN(id)) {
q.resolve(id);
} else {
q.reject('Param Id must be a number!');
}
return q.promise;
}
}
})
.otherwise({
redirectTo: '/'
});
})
.controller('mainController', function () {
})
.controller('detailsController', function ($scope, $location, id, $log) {
$scope.$on('$routeChangeError', function (event, current, previous, rejection) {
$scope.error = rejection;
});
$log.info($scope.error);
});
Моя проблема: этот код работает, но когда ID является числовым, но когда он строковый контроллер не регистрирует ничего в консоли. Любое предложение? (когда id является числовым в консоли, я вижу undefined - это хорошо, я думаю)
Обновлено:
app.js
angular.module('admin', ['ngRoute'])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/all.html',
})
.when('/details/:id', {
templateUrl: 'views/details.html',
controller: 'detailsController',
resolve: {
'id': function ($route, $q) {
var q = $q.defer();
var id = parseInt($route.current.params.id, 10);
if (!isNaN(id)) {
q.resolve(id);
} else {
q.reject('Param id must be a number!');
}
return q.promise;
}
}
})
.otherwise({
redirectTo: '/'
});
})
.controller('mainController', function ($rootScope, $location) {
$rootScope.$on('$routeChangeError', function (event, current, previous, rejection) {
$rootScope.error = rejection;
});
})
.controller('detailsController', function ($scope, id) {
$scope.id = id;
});
index.html
<div class="container-fluid">
<div class="row">
<div class="col xs-10 col-xs-offset-1" ng-controller="mainController" ng-view>
</div>
</div>
</div>
details.html
<h3>{{id}}</h3>
<h3>{{error}}</h3>
Проблема в том, что когда у меня есть действительный идентификатор URL-адреса, отображается на экране, но когда я меняю идентификатор на плохое значение на экране, я вижу напечатанный идентификатор и ошибку (кажется, что $ scope.id сохраняется и все время в памяти), Вторая проблема заключается в том, что когда у меня есть, например, плохой URL-адрес, я вижу ошибку на экране, но когда я нажимаю F5, а страница "перезагрузить" маршрут не изменяется, я вижу белый экран без какой-либо ошибки (поскольку маршрут тот же, и событие routeChangeError isn Уволен...).
$routeChangeError
не будет определен, если не существует допустимого значения