it-swarm.dev

هل يمكن أن تحتوي طرق angularjs على قيم معلمات اختيارية؟

هل يمكنني تعيين مسار باستخدام params اختياري (نفس القالب ووحدة التحكم ، ولكن يجب تجاهل بعض params إذا لم تكن موجودة؟

لذلك بدلاً من كتابة القاعدتين التاليتين ، هل لديك سوى قاعدة واحدة؟

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

لم أجد أي شيء في وثائقهم.

160
Alexandru R

يبدو أن Angular لديه دعم لهذا الآن.

من أحدث (v1.2.0) مستندات ل $routeProvider.when(path, route) :

path يمكن أن يحتوي على مجموعات مسماة اختيارية مع علامة استفهام (:name?)

237
g-eorge

مثل @ g-eorge ذكر ، يمكنك جعله مثل هذا:

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

يمكنك أيضا جعل ما تحتاجه معلمات اختيارية.

54
zmilan

يرجى الاطلاع على @ jlareau الإجابة هنا: https://stackoverflow.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:'/'});
    }
);
8
chrisjordanme

في الواقع أعتقد أن OZ_ قد يكون صحيحًا إلى حد ما.

إذا كان لديك المسار '/users/:userId' وانتقل إلى '/users/' (لاحظ الزائدة /) ، فيجب أن يكون $routeParams في جهاز التحكم الخاص بك كائنًا يحتوي على userId: "" في 1.1.5. لذلك لا يتم تجاهل أي حد أقصى userId ، لكنني أعتقد أنه أفضل ما ستحصل عليه.

2
Roy Daniels