Угловой параметр проверки

0

Мой код:

/** * Создано 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 - это хорошо, я думаю)

  • 0
    $routeChangeError не будет определен, если не существует допустимого значения
  • 0
    Да, поэтому, когда id является числовым, undefined - это нормально, но когда id не числовой, он должен регистрироваться в консоли, но консоль очищается без ошибок.
Показать ещё 2 комментария
Теги:

1 ответ

0

Обновлено:

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 Уволен...).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню