В противном случае на StateProvider


используя angular-ui-router, как я могу использовать в противном случае метод on $stateProvider или как я могу использовать его на всех ?

6 91

6 ответов:

вы не можете использовать $stateProvider.

вам нужно впрыснуть $urlRouterProvider и создать код, подобный:

$urlRouterProvider.otherwise('/otherwise');

The /otherwise url должен быть определен в состоянии как обычно:

 $stateProvider
    .state("otherwise", { url : '/otherwise'...})

смотрите эту ссылку где ksperling объясняет

вы можете с $stateProvider С помощью поймать весь синтаксис ("*path"). Вам просто нужно добавить конфигурацию состояния в нижней части списка, как показано ниже:

$stateProvider.state("otherwise", {
    url: "*path",
    templateUrl: "views/error-not-found.html"
});

все параметры описаны в https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters.

хорошая вещь этого варианта, в отличие от $urlRouterProvider.otherwise(...), это то, что вы не вынуждены менять местоположение.

вы также можете вручную ввести $state в функцию в противном случае, которую затем можно перейти в состояние без url. Это имеет то преимущество, что браузер не изменяет адресную строку, что полезно для обработки возврата к предыдущей странице.

    $urlRouterProvider.otherwise(function ($injector, $location) {
        var $state = $injector.get('$state');

        $state.go('defaultLayout.error', {
            title: "Page not found",
            message: 'Could not find a state associated with url "'+$location.$$url+'"'
        });
    });

ОК, глупый момент, когда вы понимаете, что вопрос, который вы задали, уже ответил в первых строках примера кода! Просто взгляните на пример кода.

       angular.module('sample', ['ui.compat'])
      .config(
        [        '$stateProvider', '$routeProvider', '$urlRouterProvider',
        function ($stateProvider,   $routeProvider,   $urlRouterProvider) {
          $urlRouterProvider
            .when('/c?id', '/contacts/:id')
            .otherwise('/'); // <-- This is what I was looking for ! 


          ....

посмотреть здесь.

The принято отвечать ссылки angular-route спрашивает о ui-router. Принятый ответ использует "монолитный"$routeProvider, который требует ngRoute модуль (в то время как ui-router нужны ui.router модуль)

The самый высокий рейтинг ответа использует $stateProvider вместо этого и говорит что-то вроде .state("otherwise", { url : '/otherwise'... }), но я не могу найти никакого упоминания "иначе" в документация ссылки. Однако, я вижу, что это в ответ где он говорит:

вы не можете использовать $stateProvider. Вам нужно ввести $urlRouterProvider

вот где мой ответ может помочь вам. Для меня было достаточно использовать $urlRouterProvider вот так:

 my_module
   .config([
    , '$urlRouterProvider'
    , function(
        , $urlRouterProvider){
            //When the url is empty; i.e. what I consider to be "the default"
            //Then send the user to whatever state is served at the URL '/starting' 
            //(It could say '/default' or any other path you want)
            $urlRouterProvider
                    .when('', '/starting');
                    //...
    }]);

мое предложение согласуется с ui-routerдокументация, (это конкретная редакция), где он включает в себя аналогичное использование.when(...) Метод (первый вызов функция):

app.config(function($urlRouterProvider){
  // when there is an empty route, redirect to /index   
  $urlRouterProvider.when('', '/index');

  // You can also use regex for the match parameter
  $urlRouterProvider.when(/aspx/i, '/index');
})

Я просто хочу, чтобы перезвонить на большие ответы, которые уже предоставлены. Последняя версия @uirouter/angularjs отмечен классом UrlRouterProvider как deprecated. Теперь они рекомендуют использовать . Вы можете достичь того же результата со следующим изменением:

$urlService.rules.otherwise('/defaultState');

дополнительные методы:https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html