2016-12-18 17 views
5

में मैट्रिक्स पैरामीटर को कैसे अपडेट करें 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 पैरामीटर घटाना और:

+0

शायद 'this._router.navigate ([this._router.url, {currentPage: this.pagination।currentPage}], {preserveQueryParams: true}); ' –

+0

सही पथ की तरह लगता है! बस इसे एक शॉट दिया, और कोई पासा नहीं दिया। मुझे लगता है कि इस मुद्दे के साथ कुछ करने के लिए कुछ है ._router.url एक स्ट्रिंग है (यह अभी भी अर्धविराम एन्कोड किया गया है)। क्या कोई और जटिल वस्तु है कि नेविगेट विधि का उपयोग किया जा सकता है, जिसमें अभी भी क्वेरी पैराम स्पष्ट रूप से होंगे? – Corbfon

+0

यह मुझे _almost_ मिलता है जहां मैं चाहता हूं: 'this._router.navigate (["..", {currentPage: this.pagination.currentPage}]);', सिवाय इसके कि यह अन्य क्वेरी पैरामीटर को टॉस करता है। '{PreserveQueryParams: true}' को जोड़ने का भी प्रयास किया और यह व्यवहार – Corbfon

उत्तर

2

दृष्टिकोण है कि समाप्त हो गया मेरे लिए अच्छी तरह से काम कर रहे कुछ का उपयोग कर की कोशिश की है यह है फिर निष्पादित करने के लिए router.navigateByUrl(newUrl) का उपयोग करें।

add: merge({newParam: 111}, route.snapshot.params) 

update: merge({param: 111}, route.snapshot.params) 

subtract: merge({param: null}, route.snapshot.params) 

आशा है कि दूसरों को यह मेरे जैसा उपयोगी लगेगा।

एक अन्य उदाहरण के बजाय Object.assign का उपयोग कर मर्ज की:

let route = this.route; // The imported ActivatedRoute 
let currentParamsObj: Params = Object.assign({}, route.params); 

let newParam = {}; 
newParam[key] = value; 

let newUrl = this._router.createUrlTree([ 
     Object.assign(currentParamsObj, newParam) 
    ], {relativeTo: this.route }); 

this._router.navigateByUrl(newUrl); 
1

आप की तरह

this._router.navigateByUrl('/search;term='+this.term+';pageSize='+this.pageSize+';currentPage='+this.currentPage+';someFilter='+this.someFilter; 
+0

मुझे नहीं लगता कि यह काम करेगा। मैट्रिक्स पैरामीटर बाल सेगमेंट में जोड़े गए क्वेरी पैरामीटर हैं। –

+0

@ गुंटर ज़ोचबॉयर सुनिश्चित नहीं है कि 'सेगमेंट से जुड़े क्वेरी पैरामीटर' से आपका क्या मतलब है। मैं वर्तमान में वैकल्पिक पैरा के लिए मैट्रिक्स पैराम्स का उपयोग कर रहा हूं और इसी तरह के दृष्टिकोण मेरे लिए ठीक काम करता है। –

+0

http://stackoverflow.com/a/5602678/217408 –