Использование углового ui-router Как использовать otherwise method на $stateProvider или как его можно использовать?В противном случае на StateProvider
ответ
Вы не можете использовать только $stateProvider
.
Вы должны вводить $urlRouterProvider
и создать код, подобный:
$urlRouterProvider.otherwise('/otherwise');
/otherwise
URL должен быть определен на состояние, как обычно:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
Смотрите эту ссылку, где ksperling explains
Я пробовал, и это сработало! таким образом, это лучший ответ;) – Adelin
Фактически вы можете использовать '$ stateProvider'. Это меньше работает, если вы просто хотите отобразить шаблон, но не перенаправлять. Я предпочитаю ответ @ juan-hernandez. – weltschmerz
означает, что значение, переданное 'в противном случае' (в данном случае' '/ else'') должно совпадать с именем состояния (первым параметром' .state') или значением параметра 'url'? – d512
Хорошо, глупый момент, когда вы понимаете, что вопрос, который вы задали, уже ответил в первых строках образца кода! Просто взгляните на образец кода.
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 !
....
Вы можете с $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(...)
, заключается в том, что вы не вынуждены менять местоположение.
не могли бы вы уточнить: 'вы не вынуждены менять местоположение? –
Он имеет в виду, что URL-адрес останется таким, каким он был. Поэтому, если пользователь переходит к '/ this/does/not/exist', тогда URL-адрес останется таким же в адресной строке. Другое решение приведет вас к '/ else' –
Я использовал ваше решение, и оно сработало (я могу сохранить URL-адрес, который не был найден, что отлично, потому что я использую http://luisfarzati.github.io/angulartics/ и таким образом, я также вижу навигацию к страницам, которые не были найдены) для случаев, когда URL-адрес, к которому пользователь переходит, не существует. Однако, если я перехожу к этому URL-адресу, используя $ state.go ('other') внутри контроллера, я теряю URL-адрес. Я перемещаюсь в явном виде к этому состоянию, когда пользователь переходит на страницу сведений о деталях, а сервер возвращает 404 (например, если элемент был удален). Вы знаете, как это исправить? – pcatre
Вы также можете вручную ввести $ 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+'"'
});
});
, который решил мою проблему о том, как проверить, являемся ли мы средним или загруженным, когда используется другое - большое вам спасибо :) –
вы сохранили мою день! – Titmael
Не забудьте, хотите ли вы минимизировать это значение? –
В accepted answer ссылки angular-route
спрашивает о ui-router
. Принятый ответ использует "monolithic"$routeProvider
, который требует ngRoute
модуля (в то время как ui-router
необходим модуль ui.router
)
highest-rated answer использует $stateProvider
вместо этого, и говорит что-то вроде .state("otherwise", { url : '/otherwise'... })
, , но я не могу найти ни одного упоминания о «иначе» в documentation it links. Тем не менее, я вижу, что $stateProvider
упоминается in this answer, где он говорит:
Вы не можете использовать только
$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
documentation, (this specific revision), где он включает в себя подобное использование из.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', так что это поможет мне) –