2016-09-08 8 views
10

मेरे पास /contacts पर पंजीकृत एक घटक है, जो संपर्कों की एक सूची प्रदर्शित करता है। मैंने प्रदर्शित सूची को फ़िल्टर करने के लिए <input [value]="searchString"> जोड़ा है।कोणीय 2 नया राउटर: बदलें/सेट क्वेरी पैराम्स


अब मैं क्वेरी परम के रूप में URL में searchString प्रदर्शित करना चाहते हैं। (नया रूटर 3.0.0 RC2 का उपयोग करना)

सरकारी डॉक्स (https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters) queryParams को बदलने के लिए router.navigate उपयोग करने के लिए कैसे दिखा। लेकिन इस अजीब लगता है, क्योंकि मैं सिर्फ जानना चाहता है जो मार्ग मैं वर्तमान में कर रहा हूँ बिना queryParams बदलना चाहते हैं: router.navigate(['/contacts'], {queryParams:{foo:42}})

(मुझे पता है कि यह घटक लोड नहीं होता है, तो मैं सिर्फ queryParams बदल रहा हूँ, लेकिन अभी भी इस


कुछ प्रयास रहा है कि router.navigate([], {queryParams:{foo:42}}) काम करता है पता चल जाने के बाद लिखने के लिए सही) महसूस नहीं करता है। यह बेहतर तरीका लगता है।

लेकिन मुझे अभी भी यकीन नहीं है कि यह सही तरीका है या नहीं। या अगर मैं इसके लिए कुछ विधि याद किया।


आप अपना queryParams कैसे बदलते हैं?

+0

तो अपने राउटर फ़ाइल में '/ संपर्क /: खोज-क्वेरी' जैसे रूट पैराम में खोज क्वेरी डालने के बारे में और परिवर्तनों के लिए इसे अपने घटक में देखें? – mrgoos

+0

क्या इससे कोई फर्क पड़ता है? मैं 'क्वेरी पैराम्स' का भी निरीक्षण कर सकता हूं, यह समस्या नहीं है। '... 'मेरे वर्तमान घटक में लगभग 20 खोज पैरामीटर हैं, उनमें से अधिकतर वैकल्पिक हैं और उनमें से कुछ एक दूसरे को बाहर करते हैं। जब उपयोगकर्ता किसी भी पैरामीटर को बदलता है, तो प्रदर्शित सूची फ़िल्टर हो जाएगी, और इसके अतिरिक्त मैं यूआरएल के भीतर इन पैरामीटर परिवर्तनों को प्रतिबिंबित करना चाहता हूं। '... 'सवाल सिर्फ * *' क्वेरी पैराम्स 'सेट करने का सही तरीका क्या है?" * या * "राउटर.नाविगेट ([], ...)' एकमात्र/सही तरीका है?" * –

+1

उत्तर के लिए धन्यवाद, यह मेरी मदद की। मैं router.navigate ([], {queryParams: {...}}) का उपयोग भी करता हूं। – skovmand

उत्तर

12

आप रूटर वर्ग घोषणा में देखें, तो आपको लगता है कि पा सकते हैं:

नेविगेट आदेशों की प्रदान की सरणी और एक प्रारंभिक बिंदु पर आधारित है। यदि कोई प्रारंभिक मार्ग प्रदान नहीं किया गया है, तो नेविगेशन पूर्ण है।

नेविगेशन सफल होने पर भी यह मूल्य के साथ वादा करता है।

नेविगेट करें (कमांड: कोई [], अतिरिक्त ?: नेविगेशन एक्स्ट्रा): वादा;

आदेश - राउटर को आदेशों की सरणी जहां नेविगेट करना है;

एक्स्ट्रा कलाकार - वैकल्पिक पैरामीटर जहां आप NavigationExtras वर्ग में देखें, तो आप न केवल यह है कि आप रूटर करने के लिए क्वेरी पैरामीटर निर्दिष्ट कर सकते हैं, लेकिन यह भी सेट पूर्व क्वेरी पैरामीटर को संभाल पाएंगे क्वेरी की तरह पैरामीटर

अतिरिक्त गुण निर्दिष्ट आदि ।

मैं इस तरह नेविगेट विधि का इस्तेमाल किया:

this.router.navigate([], { 
     queryParams: objectWithProperties, 
     relativeTo: this.activeRoute 
    }); 

जहां खाली सरणी मतलब यह है कि स्थान परिवर्तन नहीं करता है और एक्स्ट्रा कलाकार में मैं गुणों के साथ वस्तु का उपयोग कर क्वेरी पैरामीटर परिभाषित करता हूं।

कोणीय को हल करने वाले कुछ इस तरह में वस्तु:

siteBasePath/routerDirectory?http://vsavkin.tumblr.com/post/145672529346/angular-router

मुझे आशा है कि किसी को यह उपयोगी मिल जाएगा: प्रॉपर्टी = propertyValue

यहाँ और अधिक उपयोगी जानकारी और जो मैं बहुत उपयोगी पाया उदाहरण हैं।

+0

यह अच्छा है। केवल नकारात्मक पक्ष यह 'ngOnInit' को ट्रिगर नहीं करता है। तो यदि कोई प्रश्न पैरामीटर बदलता है और हमें एपीआई कॉल करने की आवश्यकता है, तो हमें घटनाओं को रूट करने की आवश्यकता है। क्या ये सही है? – DAG

+1

यदि आप पर्यवेक्षण का उपयोग करते हैं तो आप ngOnInit में ऐसा कर सकते हैं। मैं कोड को आपके मूल प्रश्न में यहां पोस्ट करूंगा: https://stackoverflow.com/questions/44930868/angular-navigate-to-url-by-replacing-an-existing-parameter?noredirect=1#comment76838644_44930868 – DeborahK

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