में मैट्रिक्स पैरामीटर को कैसे अपडेट करें Angular2 में, क्या मैट्रिक्स पैरामीटर को अपडेट करने का कोई तरीका है, लेकिन उसी घटक पर नेविगेट करें? मूल रूप से एक यूआरएल है कि तरह लग रहा है से आसानी से संक्रमण के लिए करना चाहते हैं:Angular2
/search;term=paris;pageSize=24;currentPage=1;someFilter=value;
एक ही बात करने के लिए है, लेकिन currentPage साथ पृष्ठांकन पर अद्यतन:
/search;term=paris;pageSize=24;currentPage=2;someFilter=value;
router.navigate
उपयोग करने के लिए प्रदर्शित नहीं हुआ है सबसे अच्छा विकल्प बनें, क्योंकि मुझे navigate
के उपयोग के लिए यूआरएल को दोबारा बनाने के लिए अपने स्वयं के तर्क लिखना होगा (कुछ ऐसा पहले से मौजूद है जो पहले से मौजूद है)।
किक और गिगल्स के लिए, मैं
this._router.navigate([this._router.url, {currentPage: this.pagination.currentPage}]);
का प्रयास किया लेकिन (के रूप में आप उम्मीद कर सकते), रूटर तथ्य वर्तमान यूआरएल पर मैट्रिक्स पैरामीटर देखते हैं कि करने के लिए गूंगा है, इसलिए परिणाम है सुंदर नहीं।
संपादित करें: यह भी उल्लेख करना चाहिए मैट्रिक्स मापदंडों के अतिरिक्त कुंजी/मान जोड़े के किसी भी संख्या, इसलिए किसी भी मार्ग को हार्ड-कोड हो सकता है सवाल से बाहर
संपादित है: मैं के बाद से preserveQueryParams: true
उपयोग करने के लिए कोशिश की है जैसे:
this._router.navigate(["..", {currentPage: this.pagination.currentPage}], {preserveQueryParams: true});
क्रम में एक आसानी से प्रयोग करने योग्य/हस्तांतरणीय समाधान करने के लिए, लेकिन उस मार्ग पर मैट्रिक्स पैरामीटर नहीं निभाया।
अद्यतन: मैं के बाद से आवश्यक व्यवहार प्राप्त करने के लिए अपने खुद के तर्क को क्रियान्वित किया है, इसलिए यहाँ समाधान के लिए एक कोड का टुकड़ा है:
let currentParamsArr: Params = this.route.snapshot.params;
let currentParamsObj: any = { };
for (let param in currentParamsArr) {
currentParamsObj[param] = currentParamsArr[param];
}
currentParamsObj.currentPage = +pageNum; //typecasting shortcut
this._router.navigate([currentParamsObj], { relativeTo: this.route });
इस कोड मानकों के माध्यम से लूप (के रूप में वे स्नैपशॉट में खड़े) , और उनमें से एक ऑब्जेक्ट बनाता है, फिर मैं जिस पैरामीटर को अपडेट करना चाहता हूं उसे जोड़ता/संपादित करता है, फिर "नया" मार्ग
पर नेविगेट करता है, लेकिन यह सुंदर नहीं है, क्योंकि मेरे पास अनिवार्य रूप से यह तर्क होगा कार्यक्रम के कई स्थानों या राउटर में संशोधन करना है या कुछ अन्य सामान्य विधि प्रदान करना है।
let route: ActivatedRoute;
const newUrl = router.createUrlTree([
merge({'a': 123}, route.snapshot.params)
], {relativeTo: route});
मर्ज का उपयोग करके आप जोड़ सकते हैं, अद्यतन और url पैरामीटर घटाना और:
शायद 'this._router.navigate ([this._router.url, {currentPage: this.pagination।currentPage}], {preserveQueryParams: true}); ' –
सही पथ की तरह लगता है! बस इसे एक शॉट दिया, और कोई पासा नहीं दिया। मुझे लगता है कि इस मुद्दे के साथ कुछ करने के लिए कुछ है ._router.url एक स्ट्रिंग है (यह अभी भी अर्धविराम एन्कोड किया गया है)। क्या कोई और जटिल वस्तु है कि नेविगेट विधि का उपयोग किया जा सकता है, जिसमें अभी भी क्वेरी पैराम स्पष्ट रूप से होंगे? – Corbfon
यह मुझे _almost_ मिलता है जहां मैं चाहता हूं: 'this._router.navigate (["..", {currentPage: this.pagination.currentPage}]);', सिवाय इसके कि यह अन्य क्वेरी पैरामीटर को टॉस करता है। '{PreserveQueryParams: true}' को जोड़ने का भी प्रयास किया और यह व्यवहार – Corbfon