Используя angular-ui-router, как я могу использовать другой метод в $ stateProvider или как я могу его использовать вообще?
Используя angular-ui-router, как я могу использовать другой метод в $ stateProvider или как я могу его использовать вообще?
Ответы:
Вы не можете использовать только $stateProvider
.
Вам нужно ввести $urlRouterProvider
и создать код, похожий на:
$urlRouterProvider.otherwise('/otherwise');
/otherwise
URL должен быть определен на состояние , как обычно:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
См. Эту ссылку, где объясняет ksperling
$stateProvider
. Меньше работы, если вы просто хотите отобразить шаблон, но не перенаправить. Я предпочитаю ответ @ juan-hernandez.
otherwise
(в данном случае '/otherwise'
) соответствовать имени состояния (первый параметр .state
) или значению url
параметра?
Вы можете $stateProvider
использовать синтаксис catch all ( "*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(...)
, что вам не нужно менять местоположение.
you're not forced to a location change
:?
/this/does/not/exist
адресу, URL-адрес останется в адресной строке. Другое решение приведет вас к/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 !
....
Я просто хочу поделиться отличными ответами, которые уже предоставлены. Последняя версия @uirouter/angularjs
пометила класс UrlRouterProvider
как устаревший. Теперь они рекомендуют использовать UrlService
вместо этого. Вы можете добиться того же результата с помощью следующей модификации:
$urlService.rules.otherwise('/defaultState');
Дополнительные методы: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html
В Обслуживаемом ответ ссылка angular-route
спрашивает о ui-router
. В принятом ответе используется «монолитный» $routeProvider
, для которого требуется ngRoute
модуль (тогда как ui-router
требуетсяui.router
модуль)
Самый высокий рейтинг ответ использует $stateProvider
вместо этого, и говорит что - то вроде .state("otherwise", { url : '/otherwise'... })
, но я не могу найти ни одного упоминания о «иначе» в документации она связывает . Однако я вижу, что $stateProvider
это упоминается в этом ответе, где говорится:
Вы не можете использовать только
$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');
})
$stateProvider.otherwise
, так что это поможет мне)