क्या एंगुलरज मार्गों में वैकल्पिक पैरामीटर मान हो सकते हैं?


166

क्या मैं वैकल्पिक पैरा (समान टेम्पलेट और नियंत्रक) के साथ एक मार्ग निर्धारित कर सकता हूं, लेकिन यदि वे मौजूद नहीं हैं, तो कुछ 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

मुझे उनके दस्तावेज में कुछ नहीं मिला।


उन्हें []1.1.5 संस्करण में नजरअंदाज (बिना ) किया जाएगा।
OZ_

वास्तव में? मैं 1.1.5 पर हूं, कोड [: userId] के साथ कोशिश की है और उन्हें अनदेखा नहीं करता है।
एलेक्जेंड्रू आर

बिना प्रयास करें []। इसे देखें: github.com/angular/angular.js/commit/…
OZ_

ओह, क्षमा करें, यह लगभग $ संसाधन है, निश्चित नहीं है कि यह रूटिंग में काम करेगा या नहीं। मुझे माफ करें।
OZ_

1
अगर जी-ऑरेज का उत्तर अच्छा है, तो क्या आप इसे चिह्नित करेंगे ताकि लोगों को सर्वश्रेष्ठ उत्तर खोजने के लिए पूरी बात को स्क्रॉल न करना पड़े?
एलेक्सस्टैक

जवाबों:


243

ऐसा लग रहा है कि अब इसके लिए एंगुलर का समर्थन है।

के लिए नवीनतम (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
कोणीय 1.3 के रूप में, उपरोक्त टिप्पणियों में उल्लिखित अनुगामी स्लेश मुद्दा निश्चित है। के रूप में करता है / दावों / दस्तावेजों / 1234 / सही ढंग से काम करता है, जैसा कि / दावा / दस्तावेज / 1234 है। संक्षेप में, यह अनुगामी स्लैश के साथ या इसके बिना काम करता है।
जुडाह गेब्रियल हिमांगो

1
यदि मैं अपने मार्ग में एक वैकल्पिक पैरामीटर रखता हूं, तो मैं अभी भी इस व्यवहार को देख रहा हूं। उदाहरण के लिए: यदि मार्ग है: '/: वर्गीकरण? / पैकेज / तुलना' और मैं url पर नेविगेट करने का प्रयास करता हूं "/ पैकेज / तुलना" यह काम करता है। अगर मैं किसी कारण से '/ पैकेज / तुलना /' का प्रयास करता हूं तो मुझे वर्गीकरण में संलग्न एएससी कोड मिलता है, या '/% 3f / पैकेज / तुलना' जो एक वास्तविक मार्ग नहीं है।
रूबी_न्यूबी

दस्तावेज़ीकरण भ्रामक है।
ओलिवर डिक्सन

59

@ G-eorge उल्लेख की तरह, आप इसे इस तरह बना सकते हैं:

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

आप भी उतना ही कर सकते हैं, जितना कि यू ऑप्शनल मापदंडों की जरूरत है।


8

यहां देखें

आप टेम्पलेट स्ट्रिंग उत्पन्न करने के लिए फ़ंक्शन का उपयोग कर सकते हैं:

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को पूरी तरह से नजरअंदाज नहीं किया जाता है, लेकिन मुझे लगता है कि यह सबसे अच्छा है जिसे आप प्राप्त करने जा रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.