2016-08-11 25 views
12

को धक्का देने के बजाय इतिहास को प्रतिस्थापित करें, बजाय इतिहास को प्रतिस्थापित करने के बजाय कोणीय 2 के नए राउटर (आरसी .1) में एक नया धक्का दे रहा है?कोणीय 2 -

प्रश्न सूची (/questions) एक नया मार्ग (/questions/add) में एक नया मोडल खोलने में उदाहरण इम के लिए, और एक नया सवाल मैं सवाल दृश्य (/questions/1) के लिए जाने को जोड़ने के बाद। मैं की /questions/add

+0

आप 'canDeactivate' अपने मार्ग के लिए गार्ड '/ प्रश्न/1' की कोशिश की? बस वांछित गंतव्य की जांच करें, अगर यह '../add' है, तो '/ प्रश्न' पर रीडायरेक्ट करें? या इसके बजाय '../add' मार्ग के लिए 'canActivate' लागू करें .. –

+0

बहुत जटिल है। मेरे पास सौ स्थानों हैं जहां मुझे रीडायरेक्ट के साथ इस व्यवहार और गार्ड की आवश्यकता है, केवल बंदर पैच हैं जो बहुत सारे कोड का उत्पादन करेंगे – pleerock

उत्तर

1
+0

हाँ मैंने एपीआई देखा, लेकिन मुझे राउटर से एपीआई की आवश्यकता है ताकि यह सुनिश्चित किया जा सके कि राउटर काम करता है और आसानी से अद्यतन करता है – pleerock

32

आप

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}); 
}); 
+0

अच्छी तरह से समझाया और काम करना ठीक। धन्यवाद – Mikel

+0

नोट: [राउटरलिंक] (https://angular.io/api/router/RouterLink) निर्देशों के लिए, आप उसी प्रभाव के लिए तत्व में 'replaceUrl' विशेषता' जोड़ सकते हैं। – dokkaebi

+0

'router.navigate' और' {replaceUrl: true} 'का उपयोग करने के लिए एकमात्र चेतावनी यह है कि यह एक और नेविगेशन ईवेंट पंजीकृत करेगा। यदि आप नेविगेशन ईवेंट (उदाहरण के लिए, 'नेविगेशन एंड') सुन रहे हैं और दो घटनाओं को आग नहीं करना चाहते हैं, तो 'location.replaceState' चाल करेगा। – Alan