2012-11-29 22 views
13

मेरे पास कई मार्ग हैं जो अलग हैं, लेकिन समान पैरामीटर हैं।
उदाहरण:

when '/user/:accountId/charts/:chartType', controller:ChartsController 
when '/manager/:accountId/charts/:chartType', controller:ChartsController 
when '/whatever/pathy/paththingy/charts/:chartType', controller:ChartsController 

सूचना सभी तीन दृश्य ही चार्ट नियंत्रक का उपयोग दृश्य को नियंत्रित करने। यह एक काफी सामान्य नियंत्रक है लेकिन इसे उपलब्ध चार्ट टाइप के बीच टॉगल करने की आवश्यकता है ... शेष मार्ग को रखते हुए।
उदाहरण: (इस से काम करता है)

if my currrent url is '/user/001/charts/comparison' 
Then I call something like: 
$route.current.params.chartType = 'newChart'; 
$route.reload(); // or soemthing similar? 
I want the url to become '/user/001/charts/newChart' 

किसी को भी किसी भी विचार कैसे आसानी से पूरी तरह से पुनः typeing या मार्ग पथ के पुनर्निर्माण के बिना एक मार्ग के पैरामीटर अपडेट करना है?

उत्तर

10

यदि यह संभव है, तो मैं आपको इसके बजाय ui-router का उपयोग करने की सलाह दूंगा। यह कई पहलुओं में ngRoute से अधिक शक्तिशाली है।

अनिवार्य रूप से, इस मॉड्यूल एक उच्च स्तर अवधारणा मार्ग यूआरएल की तरह कम मार्ग स्तर के साथ सीधे काम करने से अंतर्निहित मार्ग जो आप ढाल लपेटकर राज्य कहा जाता है।

एक तुलना के लिए: What is the difference between angular-route and angular-ui-router?

ui रूटर के साथ

, तो आप इस तरह अपने कोड को लागू कर सकते हैं:

$stateProvider 
    .state('user.chart', { 
    url: '/user/:accountId/charts/:chartType', 
    controller: "ChartsController" 
    }) 
.state('manager.chart', { 
    url: '/manager/:accountId/charts/:chartType', 
    controller: "ChartsController" 
    }) 
.state('pathy.chart', { 
    url: '/whatever/pathy/paththingy/charts/:chartType', 
    controller: "ChartsController" 
    }) 

और तुम सिर्फ राज्यों के बीच नेविगेट करने के लिए इस कोड का उपयोग कर सकते हैं:

$state.go('user.chart',{chartType:'newChart'},{inherit:true}); 

Documentation

-1

एंज पढ़ें पर $location.search()

अपने यूआरएल को ध्यान में रखते ular डॉक्स GET अनुरोध है, और कुछ मानकों

है

आप इस पद्धति

/user/001/charts/?chartType=comparison 

var searchObject = $location.search(); 
// => { chartType : 'comparison' } 

का उपयोग कर अब ChartType

का मूल्य बदल अपने URL में पैरामीटर प्राप्त कर सकते हैं
$location.search('chartType', 'newChart'); 

यह आपके यूआरएल में पैरामीटर को

में बदल देगा
/user/001/charts/?chartType=newChart 
+0

यह गैर-तुच्छ URL वेबसाइट, जैसे '/ posts /: post/comments /: comment' पर काम नहीं करेगा। यदि आप '/ posts/1/comment/1' पर थे और टिप्पणी 2 पर जाना चाहते थे, तो आपको इसके बजाय पोस्ट 2 या पोस्ट 2 पर रीडायरेक्ट किया जाएगा और टिप्पणी 2 – jackweirdy

10

कोणीय 1.3 जब से तुम $route.updateParams(newParams) उपयोग कर सकते हैं मार्ग पैरामीटर को बदलने के लिए।

Here is a quote from the angular docs...

$ मार्ग।updateParams (newParams);

वर्तमान URL को अपडेट करना $route सेवा का कारण बनता है, newParams में निर्दिष्ट उन के साथ वर्तमान मार्ग मानकों का स्थान लिया। प्रदान किए गए संपत्ति नाम जो मार्ग के पथ से मेल खाते हैं सेगमेंट परिभाषाओं को स्थान के पथ, में विभाजित किया जाएगा जबकि शेष गुणों को क्वेरी पैराम के रूप में माना जाएगा।

+1

इस सुविधा को लागू करने के लिए धन्यवाद जैकवेरी! ध्यान नहीं दिया कि आप यहां हैं ... –

संबंधित मुद्दे