आप
router.navigate
और फिर
का उपयोग करते हैं से replaceState उपयोग करना चाहते हैं के बजाय
/questions
लिए जाना चाहते हैं, तो मैं वापस प्रेस
location.replaceState
सटीक उसी पथ के साथ, आप आमतौर पर होने वाले परिवर्तनों को ट्रिगर कर सकते हैं, साथ ही साथ इतिहास को बदल सकते हैं।
उदाहरण के लिए, आपके मामले में:
:
this.router.navigate(['questions/1']);
this.location.replaceState('questions/1');
आप मार्ग में पैरामीटर जोड़ने की जरूरत है, तो आप
router.serializeUrl(router.createUrlTree(/* what you put in your router navigate call */));
का उपयोग कर अपने उदाहरण में स्थान के लिए यूआरएल बना सकते हैं
this.router.navigate(['questions/1', {name:"test"}]);
this.location.replaceState(this.router.serializeUrl(this.router.createUrlTree(['questions/1', {name:"test"}])));
अद्यतन
ऐसा लगता है कि कोणीय राउटर अब replace url option के साथ आता है। अपने उदाहरण में:
this.router.navigate(["questions/1"], {replaceUrl:true});
अद्यतन 2
वहाँ एक वर्तमान issue जहां कई समय की एक छोटी राशि में किया नेविगेशन सही ढंग से यूआरएल की जगह नहीं हो सकता है। एक अस्थायी समाधान के रूप में, प्रत्येक एक अलग चक्र में आग को पाने के लिए एक टाइमआउट में नेविगेट समारोह लपेट:
setTimeout(()=>{
this.router.navigate(["questions/1"], {replaceUrl:true});
});
आप 'canDeactivate' अपने मार्ग के लिए गार्ड '/ प्रश्न/1' की कोशिश की? बस वांछित गंतव्य की जांच करें, अगर यह '../add' है, तो '/ प्रश्न' पर रीडायरेक्ट करें? या इसके बजाय '../add' मार्ग के लिए 'canActivate' लागू करें .. –
बहुत जटिल है। मेरे पास सौ स्थानों हैं जहां मुझे रीडायरेक्ट के साथ इस व्यवहार और गार्ड की आवश्यकता है, केवल बंदर पैच हैं जो बहुत सारे कोड का उत्पादन करेंगे – pleerock