그렇지 않으면 StateProvider에서


답변:


123

만 사용할 수 없습니다 $stateProvider.

$urlRouterProvider다음과 유사한 코드 를 삽입 하고 생성 해야 합니다.

$urlRouterProvider.otherwise('/otherwise');

/otherwiseURL은 평소와 같은 상태를 정의해야합니다 :

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

ksperling이 설명하는 이 링크를 참조하십시오.


실제로 사용할 수 있습니다 $stateProvider. 템플릿을 표시하고 리디렉션하지 않으려면 작업이 덜합니다. @ juan-hernandez의 대답을 선호합니다.
weltschmerz 2015-08-12

전달 된 값 otherwise(이 경우 '/otherwise')이 상태 이름 (에 대한 첫 번째 매개 변수 .state) 또는 url옵션 의 값 과 일치해야 합니까?
d512

이것은 이제 더 이상 사용되지 않습니다- @babyburger의 답변
Vedran

81

catch all 구문 ( ) 을 $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(...)위치 변경을 강요하지 않는다는 것입니다.


자세히 설명해 주 you're not forced to a location change시겠습니까?
Kevin Meredith

1
그가 의미하는 바는 URL이 그대로 유지된다는 것입니다. 따라서 사용자가로 이동 /this/does/not/exist하면 URL은 주소 표시 줄에 그대로 유지됩니다. 다른 솔루션은 다음으로 이동합니다/otherwise
Matt Greer

난 당신의 솔루션을 사용하고 (나는 내가 사용하기 때문에 큰 인 발견되지 않은 URL을 유지할 수 있습니다 일 luisfarzati.github.io/angulartics을 경우 경우에 및 나는 또한 발견되지 않은 페이지에 대한 탐색을 볼 수 있습니다 이런 식으로) 사용자가 이동하는 URL이 존재하지 않습니다. 그러나 컨트롤러 내에서 $ state.go ( 'otherwise')를 사용하여이 URL로 이동하면 URL이 손실됩니다. 사용자가 항목의 세부 정보 페이지로 이동하고 서버가 404를 반환하면 (예 : 항목이 삭제 된 경우) 명시 적으로이 상태로 이동합니다. 이 문제를 해결하는 방법을 알고 있습니까?
pcatre 2014 년

@pcatre 당신은 옵션 location = false를 사용할 수 있으며 URL은 변경되지 않습니다. 예 : $ state.go ( 'otherwise', {}, {location : false})
JakubKnejzlik

35

$ state를 else 함수에 수동으로 삽입 할 수도 있습니다. 그러면 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+'"'
        });
    });

그것은 우리가 중반에 응용되어 있는지 확인하는 방법에 대한 내 문제를 해결하거나 사용하는 경우 온로드 - :) 너무 감사합니다
요른 Berkefeld

당신은 내 하루를 구했습니다!
Maelig

이 최소화 싶다면 망가 유 분사 $ 필요 잊지
스텐 Muchow

3

좋아, 당신이 요청한 질문이 이미 샘플 코드의 첫 줄에 답이 있다는 것을 깨닫는 어리석은 순간! 샘플 코드를 살펴보십시오.

       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 ! 


          ....

여기를보세요.



0

허용 응답 참조 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');
})
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.