2017-11-14 19 views
1

있는 경우에만 :일치 경로 질의 PARAM 내가 URL을 <code>/test?x=5</code> 경우이 경로를 일치시킬 및 PARAM의 X가 제공되지 않은 경우 (<code>/test</code>)와 일치하지 않는

stateProvider.state({ 
    name: 'someState', 
    url: '/test?x', 
    template: '<div>matched</div>' 
}); 

이 구성이 작동하지 않습니다가, 경로는 두 경우 모두 일치합니다. 쿼리 param이 필요합니다.

I는 다음과 같이 깨끗한 솔루션을 기다리고 있었다 :

stateProvider.state({ 
    name: 'someState', 
    url: '/test', 
    params: { 
     x: { 
      required: true 
     } 
    }, 
    template: '<div>matched</div>' 
}); 
+0

URL을 'url :'/ test/: x''로 변경할 수 있습니까? 그것은 독특한 패턴을 만들 것이며, 당신이 필요로하는 것을 얻을 수 있습니다. –

+0

@PankajParkar 아니, 그게 문제 야. – karaxuna

+0

URL을 '/ test/: x'로 변경하거나 수신 컨트롤러에 param이 있는지 확인하십시오. x가 없으면 다른 경로로 리디렉션하거나 오류를 발생시킵니다. –

답변

3

을 당신은 다른

stateProvider.state({ 
    name: 'someState', 
    url: '/test?x', 
    template: '<div>matched</div>', 
    resolve: { 
     xExists: ['$stateParams', '$state', 
     function($stateParams, $state){ 
      if(!$stateParams.x) $state.go('someotherstate'); 
     } 
     ] 
    } 
}); 

을 현재의 노선에 해결 작성하고 매개 변수인지 그 resolve 함수에서하는 존재 여부를 수 더 나은 해결책은 패턴을 고유하게 만드는 /test/:x으로 경로 패턴을 변경하는 것입니다. 경로 패턴과 일치하지 않으면 ui-router가 기본 경로로 이동합니다 (사용자가 $urlRouter.otherwise로 구성한 경우).

url: '/test/:x',