programing

angularjs 루트에는 디폴트 파라미터 값을 설정할 수 있습니까?

easyjava 2023. 3. 15. 20:03
반응형

angularjs 루트에는 디폴트 파라미터 값을 설정할 수 있습니까?

AngularJS에서 루트의 파라미터 기본값을 설정할 수 있습니까?이 모든 걸 할 수 있는 방법은 없을까?/products/123그리고./products/같은 경로로 처리됩니까?

다음과 같은 기존 코드를 리팩터링하려고 합니다.

myModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/products/', {templateUrl: 'products.html', controller: ProductsCtrl}).            
     when('/products/:productId', {templateUrl: 'products.html', controller: ProductsCtrl})
}]);


function ProductsCtrl($scope, $routeParams) {
    $scope.productId = typeof($routeParams.productId) == "undefined" ? 123 : $routeParams.productId;
}

효과는 있지만, 우아하지는 않아요.더 좋은 방법은 없을까?

이 질문이 오래되었다는 것은 알지만, 그래도:"빈" URL을 기본 productId가 포함된 URL로 리디렉션하면 어떨까요?

myModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/products/', {redirectTo: '/products/123'}).
     when('/products/:productId', {templateUrl: 'products.html', controller: ProductsCtrl})
}]);

AngularJS에서는 루트 파라미터의 기본값을 사용할 수 없습니다.

단, 루트(in)AngularJS)에는 디폴트 파라미터를 설정할 수 없습니다.

리소스에는 기본 매개 변수가 있을 수 있습니다.

AngularJS옵션 파라미터를 가진 루트를 사용하는 경우 실제로는2개의 다른 루트가 됩니다.

왜요?

  • 루트는 단순해야 합니다.

  • 경로에서 매개 변수에 대한 정규 표현식 조회를 허용하지 않습니다.

  • 루트는 어플리케이션에서 동작하기 위한 API를 공개하는 것이 아닙니다(Resources와는 다릅니다).루트는 URL을 템플릿 및 컨트롤러와 연결하는 설정일 뿐입니다.따라서 루트가 많을수록 좋습니다.

    • 어떤 루트가 어떤 URL에 맵되는지 명확합니다.

    • 그것은 좀 더 장황하지만 읽기 쉽다.더 복잡한 경로를 가지면 각도가 더 가파른 학습 곡선을 만들 수 있습니다.JS에는 필요 없습니다.

루트가 있는 서버측 프레임워크와는 달리

  • AngularJS 루트에는 이름이 없습니다.
  • 정의된 루트에서 URL을 구축하지 않습니다.
  • 루트 정의에 논리(일명 함수)가 없습니다.

단순한 경로 = 정의하기 위한 라인 수 증가 = 노선 사용 시 골칫거리 감소.

메모: 이 질문은 새로운 루트/리소스의 실장을 사전에 실시하기 위한 오래된 버전의 AngularJS(1.0이라고 생각합니다)에 관한 입니다.

저도 비슷한 요구 사항이 있었습니다.내가 한 일은 해결할 함수를 만든 것이다.이하와 같은 것

myModule.config(['$routeProvider', function($routeProvider) {
$routeProvider.
 when('/products/', resolveProduct()).            
 when('/products/:productId', resolveProduct())
}]);


function ProductsCtrl($scope, $routeParams) {
$scope.productId = $routeParams.productId;
}

function resolveProduct() {
   var routeConfig = {
      templateUrl: 'products.html', 
      controller: ProductsCtrl,
      resolve: {
         productId: ['$route', function($route){
            var params = $route.current.params;
            params.productId =  params.productId || 123;
         }]
      }
   }

   return routeConfig;
}

url: "/view/:id/:status?" 를 사용하여 옵션 파라미터를 지정할 수 있습니다.

누군가 필요할 것 같아서요

이 질문이 특정 대상인지 확실하지 않습니다.$routeProvider그러나 $stateProvider에서는 다음 방법으로 이 작업을 수행할 수 있습니다.

myApp.config(function($stateProvider) {

    $stateProvider
        .state('products', {
            url: '/:productId',
            templateUrl: "/dashboard/products.html",
            controller: 'ProductController',
            params: {
                productId: {
                  value: "defaultValue",
                  squash: true // or enable this instead to squash `productId` when empty
                } 
            }
        });
});

언급URL : https://stackoverflow.com/questions/12524533/can-angularjs-routes-have-default-parameter-values

반응형