के साथ राज्य बदलते समय पहले प्रदान किए गए वैकल्पिक पैराम को कैसे हटाएं मेरे पास एक वैकल्पिक क्वेरी पैरामीटर वाला एक राज्य है। मैंने सोचा कि यह ठीक काम कर रहा था, लेकिन मुझे पता चला कि एक बार जब मैं वैकल्पिक पैरामीटर निर्दिष्ट करता हूं, तो उस बिंदु से इसे बरकरार रखा जाता है, क्योंकि मैं अन्य पैरामीटर के साथ उसी स्थिति में नेविगेट करता हूं, जब तक कि वैकल्पिक पैरामीटर स्पष्ट रूप से हटा नहीं जाता है।यूई-राउटर
क्या यह सुनिश्चित करने का कोई तरीका है कि वैकल्पिक परिवर्तन पैरामीटर राज्य परिवर्तनों के बीच हटा दिया गया है?
यह एक उदाहरण है कि मैं राज्य कैसे बदलना चाहता हूं (परीक्षण ए और टेस्ट बी), लेकिन यह पता चला है कि वैकल्पिक पैरामीटर के प्रतिधारण के कारण मुझे 'टेस्ट डी' संस्करण का उपयोग करना होगा यदि इसका उपयोग किया गया है पहले से।
<a ui-sref="test({req: 'a'})">test a</a><br/>
<a ui-sref="test({req: 'b'})">test b</a><br/>
<a ui-sref="test({req: 'c', opt: 'here'})">test c and opt</a><br/>
<a ui-sref="test({req: 'd', opt: undefined})">test d and explicity without opt</a>
यह कैसे मेरे राज्य कॉन्फ़िगर किया गया है के समान है:
$stateProvider.state('test', {
url: '/{req}?opt',
params: {
opt: {value: null, squash: true}
},
template: '<h1>req = {{req}}</h1>' +
'<h1>opt = {{opt}}</h1>',
controller: function($scope, $stateParams) {
$scope.req = $stateParams.req;
$scope.opt = $stateParams.opt;
}
})
यहाँ एक jsfiddle है। पहले दो लिंक पर क्लिक करें, और यह अपेक्षित के रूप में काम करता है, लेकिन एक बार जब आप तीसरे लिंक पर क्लिक करते हैं, और उसके बाद पहले दो लिंक में से किसी एक पर क्लिक करें, तो आप देखेंगे कि वैकल्पिक पैरामीटर बरकरार रखा गया है, भले ही इसे छोड़ा गया हो पहले दो लिंक।
मैं वैकल्पिक पैरामीटर को स्पष्ट रूप से रीसेट करना नहीं चाहता, और यदि यह वैकल्पिक है तो यह वास्तव में काम करता है।
कोई विचार? क्या यह काम करने के लिए डिज़ाइन किया गया है? यदि हां, तो क्या मैं इसे जिस तरह से काम करना चाहता हूं, उसे पाने का कोई तरीका है? या मैंने एक बग खोजा है?
अद्यतन
ऐसा लगता है कि वैकल्पिक परम को बनाए रखना नीचे जवाब में से एक के आधार पर 'के रूप में तैयार किया गया' है। हालांकि, यदि भी संभव हो, मैं अभी भी एक कुशल कामकाज देख रहा हूं। मैं अपने ऐप में कई स्थानों से राज्य में संक्रमण करता हूं, और उनमें से 99% वैकल्पिक पैरामीटर निर्दिष्ट नहीं करते हैं। मैं उन सभी संक्रमणों को संशोधित नहीं करना चाहूंगा और वैकल्पिक पैरामीटर के बारे में उन्हें बताना नहीं चाहूंगा, और इसके बजाय, वैकल्पिक पैरामीटर को केवल उस समय के 1% निर्दिष्ट करें जब मुझे इसकी आवश्यकता हो।
मैंने दो राज्य "परीक्षण" और एक बच्चा "test.opt" बनाने के लिए प्रयास किया है और फिर सामान्य रूप से "परीक्षण" में संक्रमण (यानी, 'परीक्षण ए' और 'टेस्ट बी'), और केवल " test.opt "जब मैं वैकल्पिक पैरामीटर निर्दिष्ट करता हूं। हालांकि, मेरे पास एक संकल्प है जो एक बाकी कॉल करता है और इसे पता होना चाहिए कि क्या ऑप्ट पैरामीटर सेट किया गया है, इसलिए यह काम नहीं करता है क्योंकि संकल्प बच्चे से 'ऑप्ट' तक नहीं पहुंच सकता है।
अद्यतन # 2
मैं भी 'परीक्षण' राज्य का डुप्लिकेट बनाने की कोशिश की है, 'testopt' जिस स्थिति में फर्क सिर्फ इतना है? पैरामीटर चुनते है नाम दिया है। हालांकि, स्पष्ट रूप से यूई-राउटर दो यूआरएल के बीच अंतर नहीं कर सकता है जो केवल क्वेरी पैरा द्वारा भिन्न होता है, और इसलिए यह अभी भी 'परीक्षण' में संक्रमण करने की कोशिश करता है भले ही ऑप्टिम यूआरएल यूआरएल का हिस्सा हो।
<a ui-sref="test({req: 'a'})" ui-sref-opts="{inherit: false}">test a</a><br/>
<a ui-sref="test({req: 'b'})" ui-sref-opts="{inherit: false}">test b</a><br/>
<a ui-sref="test({req: 'c', opt: 'here'})" ui-sref-opts="{inherit: false}">test c and opt</a><br/>
<a ui-sref="test({req: 'd', opt: undefined})" ui-sref-opts="{inherit: false}">test d and explicity without opt</a>
धागा है कि इस सुविधा का अनुरोध और कार्यान्वयन दस्तावेजों:
लगता है आप की तरह इस बारे में पूछ रहे http://stackoverflow.com/questions/31542972/how-to-persist-optional-parameter-on-browser-back -इन-यूई-राउटर और उसी https://github.com/angular-ui/ui-router/issues/2115 –
के खिलाफ लॉग इन किया गया है, मुझे नहीं लगता कि यह एक ही समस्या है। यह सवाल वैकल्पिक पैरामीटर को बनाए रखने के बारे में था, इसलिए उम्मीद के अनुसार 'बैक' काम करता है। मेरी समस्या यह है कि नए राज्य में नेविगेट करते समय भी बरकरार रखा जा रहा है। बग के लिए चर्चा समाधान राज्य पैरा को कैश करना है ताकि वे 'बैक' पर जाकर पहुंच सकें। साथ ही, जैसा कि आप देख सकते हैं, मैं वास्तव में यूआरएल पर परम का उपयोग कर रहा हूं, जो थोड़ा अलग है। एसओ सवाल का समाधान कहता है कि मुझे मैन्युअल रूप से पैरामीटर को हटाना है, जो मैं एक विकल्प खोजने की कोशिश कर रहा हूं। – DavidA