angularjs 경로에 선택적 매개 변수 값이있을 수 있습니까?


166

선택적 매개 변수 (동일한 템플릿 및 컨트롤러)로 경로를 설정할 수 있지만 일부 매개 변수는 존재하지 않는 경우 무시해야합니까?

따라서 다음 두 규칙을 작성하는 대신 하나만 있습니까?

module.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/users/', {templateUrl: 'template.tpl.html', controller: myCtrl}).            
     when('/users/:userId', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

이와 같은 것 ([이 매개 변수는 선택 사항입니다))

when('/users[/:userId]', {templateUrl: 'template.tpl.html', controller: myCtrl})
//note: this previous doesn't work

나는 그들의 문서에서 아무것도 찾을 수 없었다.


[]1.1.5 버전에서는 (없이 ) 무시됩니다 .
OZ_

정말? 나는 1.1.5에 있고, 코드 [: userId]로 시도했지만 무시하지 않습니다.
Alexandru R

없이 시도하십시오 []. 커밋 참조 : github.com/angular/angular.js/commit/…
OZ_

죄송합니다. $ resource에 관한 것입니다. 라우팅에서 작동하는지 확실하지 않습니다. 실례합니다.
OZ_

1
g-orge의 답변이 좋으면 사람들이 최선의 답변을 찾기 위해 모든 것을 스크롤 할 필요가 없도록 표시 하시겠습니까?
AlexStack

답변:


243

Angular가 이제 이것을 지원하는 것 같습니다.

최신 (v1.2.0) 문서에서 $routeProvider.when(path, route):

path물음표 ( :name?) 가있는 선택적 명명 된 그룹을 포함 할 수 있습니다.


7
슬래시를 사용하지 않는 방법은 무엇입니까? 내 경로 인 경우 : .when('/claims/documents/:CLAIMS_ID/:DOCUMENT_NAME?'...URL에 슬래시가 없으면 일치하지 않습니다. 그래서 /claims/documents/1234/일치하지만 /claims/documents/1234하지 않습니다.
제임스 벨

1
@JamesBell에 의해보고 된 문제에 대한 해결책이있는 사람이 있는지 알고 싶습니다
Leiko

5
Angular 1.3부터는 위 주석에서 언급 된 슬래시 문제가 해결되었습니다. / claims / documents / 1234와 마찬가지로 / claims / documents / 1234 /로 이동하면 올바르게 작동합니다. 즉, 후행 슬래시와 함께 또는없이 작동합니다.
유다 가브리엘 희망 고

1
경로에 선택적 매개 변수가있는 경우에도 여전히이 동작이 나타납니다. 예를 들어 경로가 '/ : classification? / package / compare'이고 URL "/ package / compare"로 이동하려고하면 작동합니다. 어떤 이유로 '/ package / compare /'를 시도하면 분류에 추가 된 ASCII 코드 또는 실제 경로가 아닌 '/ % 3f / package / compare'가 나타납니다.
ruby_newbie

문서가 혼란 스럽다.
Oliver Dixon

59

@ g-eorge 언급과 같이 다음과 같이 만들 수 있습니다.

module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
  when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

선택적 매개 변수가 필요한만큼 만들 수도 있습니다.


8

여기 @jlareau 답변을 참조하십시오 : https : //.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl

함수를 사용하여 템플릿 문자열을 생성 할 수 있습니다.

var app = angular.module('app',[]);

app.config(
    function($routeProvider) {
        $routeProvider.
            when('/', {templateUrl:'/home'}).
            when('/users/:user_id', 
                {   
                    controller:UserView, 
                    templateUrl: function(params){ return '/users/view/' + params.user_id;   }
                }
            ).
            otherwise({redirectTo:'/'});
    }
);

2

실제로 나는 OZ_가 다소 정확하다고 생각합니다.

경로가 '/users/:userId'있고 '/users/'(후행 / 참고)로 이동하면 $routeParams컨트롤러 userId: ""에서 1.1.5에 포함 된 객체 여야합니다 . 따라서 매개 변수 userId가 완전히 무시되지는 않지만 얻을 수있는 최선이라고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.