2013-08-05 10 views
9

की उम्मीद है मुझे लगता है कि मूल स्थान domain.tld/blog में स्थित नहीं है एक AngularJS एप्लिकेशन बनाने रहा हूँ। मेरे पास /blog आधार पर सब कुछ के लिए रूटिंग सेटअप है। मैंने पृष्ठ <base href="/blog"> पृष्ठ के शीर्ष में मूल टैग शामिल किया था। html5Modetrue पर सेट है। ऐप के भीतर सबकुछ अपेक्षित काम करता है। हालांकि, जब मैं आधार स्थान के बाहर एक गैर-कोणीय यूआरएल पर क्लिक करता हूं तो पेज लोड नहीं होता है। ऐसा लगता है कि इस स्थान रूटर में otherwise समारोह द्वारा पकड़ा जाता है:AngularJS अपहरण गैर आधार यूआरएल मार्ग जब पृष्ठ पुनः लोड

ROUTER.otherwise({ 
    redirectTo : '/blog' 
}); 

तो जब मैं किसी भी यूआरएल पर क्लिक करें, अर्थात domain.tld/somewhere-else यह/ब्लॉग domain.tld पर रीडायरेक्ट। जाहिर है, यह वही है जो आप उम्मीद करेंगे: राउटर में नहीं मिले प्रत्येक यूआरएल के लिए, इसे 'होमपेज' पर रीडायरेक्ट करें। मेरे ऐप में यह वांछित व्यवहार नहीं है। राउटर में नहीं होने वाले सभी यूआरएल को सामान्य यूआरएल के रूप में माना जाना चाहिए और उस यूआरएल पर एक पेज रीलोड करना चाहिए।

ROUTER.otherwise(
    window.location = theRequestedUrl; 
); 

यह स्पष्ट रूप से काम नहीं करता है:

तो मैं क्या जरूरत है कुछ इस तरह है। लेकिन किसी भी तरह मुझे राउटर के अन्यथा भाग में प्रवेश करने की आवश्यकता है और इसे पृष्ठ रीलोड के साथ पृष्ठ पर रीडायरेक्ट करने के लिए कहें।

निम्नलिखित प्रश्न से संबंधित है: angular routing something weird happening

निम्नलिखित jsFiddle समस्या को दर्शाता है http://fiddle.jshell.net/43tub/6/show/light/ (धन्यवाद @rdjs!)। /outside लिंक एक पूरा पृष्ठ ताज़ा करना चाहिए पर क्लिक करें ...

+0

AngularJS का कौन सा संस्करण उपयोग कर रहे हैं? – rdjs

+0

@rdjs 1.1.5, लेकिन व्यवहार 1.0.7 – DivZero

+1

में समान है क्या यह समस्या को सटीक रूप से प्रदर्शित करता है? http://jsfiddle.net/43tub/6/ – rdjs

उत्तर

5

code पर देखकर, यह महत्वपूर्ण लगता है कि आधार "/ ब्लॉग" के बजाय "/ ब्लॉग /" है। एक बार मैं बदल कि मैं अपेक्षाकृत लिंक का उल्लेख करने में सक्षम था:

<a href="./Book/Moby">Moby</a> | 
    <a href="./Book/Gatsby">Gatsby</a> | 
    <a href=".">base root</a> | 
    <a href="/Outside">Outside</a> | // gets a nice 404 

मेरे jsfiddle, कि location.pathname हमेशा स्थापित कर रही है "[पथ] /" ध्यान दें, यह भी काम करता है हार्डकोडेड/_display/संपादित करते समय, लेकिन jsfiddle _display/और workingdir/show/संपादित करते समय स्विच किए जाने और fiddles को सहेजने के बीच स्विच करता है।

+2

वास्तव में लापता पिछला स्लैश समस्या थी! मैंने इसे पकड़ नहीं लिया क्योंकि पिछली स्लैश ने भ्रम पुस्तकालयों के साथ त्रुटियों के बहुत सारे कारणों का कारण बना दिया है, मुझे लगता है कि इसे पिछला स्लैश नहीं होना चाहिए। Respond.js लाइब्रेरी के साथ सभी त्रुटियों को सॉर्ट करने के बाद (मैंने स्थिर मेजबान के लिए प्रॉक्सी गिरा दी और आईई 8 और नीचे के लिए एक अतिरिक्त सशर्त सीएसएस का उपयोग किया ...) मैं इसका उपयोग कर रहा हूं जैसा कि अपेक्षित काम करता है! – DivZero

+0

धन्यवाद @DivZero! मुझे संदेह है कि हमारे लॉन्च से पहले मुझे अपने ऐप में आईई 8 संगतता जोड़ने के लिए मजबूर होना होगा, इसलिए इसे अपने आप बाद में मारने के बजाए इसके बारे में सुनना बहुत अच्छा है .. – lossleader

9

अनुसार कोणीय documentation

निम्नलिखित मामलों में, लिंक फिर से लिखा नहीं कर रहे हैं; इसके बजाय, ब्राउज़र मूल लिंक पर एक पूर्ण पृष्ठ रीलोड करेगा।

  • लिंक है कि लक्ष्य तत्व
    उदाहरण होते हैं: <a href="/ext/link?a=b" target="_self">link</a>
  • निरपेक्ष लिंक है कि किसी अन्य डोमेन पर
    उदाहरण जाना: <a href="http://angularjs.org/">link</a>
  • '/' के साथ शुरू लिंक है कि एक अलग आधार पथ के लिए नेतृत्व जब आधार परिभाषित किया गया है
    उदाहरण: <a href="/not-my-base/link">link</a>

देखें कि यह आपको

+2

आपके उत्तर के लिए धन्यवाद। हालांकि मैंने पहले ही यह कोशिश की थी। लक्ष्य तत्व का उपयोग करना मेरे लिए एक स्वीकार्य समाधान है। और ''/'' से शुरू होने वाले लिंक ** ** अपेक्षित/दस्तावेज के रूप में काम नहीं करते हैं। यह वही है जो मुझे चाहिए, हालांकि यह बस काम नहीं करता है ... – DivZero

+1

यह समाधान 'target =" _ self "का उपयोग कर मेरे लिए काम करता है धन्यवाद! –

+0

लक्ष्य = "_ स्वयं" मेरे लिए बिल्कुल सही था। बहुत धन्यवाद –

2

तुम भी कुछ इस तरह कर सकता है:

var redirect = function(skip, url) { 
    console.log("Redirecting to ", url); 
    window.location.href = url 
}; 
$routeProvider 
    .when('/inside-router', { templateUrl: 'something.html' }) 
    .when('/get-me-away.html', { redirectTo: redirect }) 
    .when('/static/:file', { redirectTo: redirect }) 

यहाँ एक JSFiddle with a working example है।

मूल रूप से आप कोस रहे हैं कि AngularJS एक समारोह redirectTo संपत्ति में दिए गए फोन और उसके बाद ज्यादा कुछ नहीं करना होगा समारोह एक स्ट्रिंग वापस नहीं करता है।

0

आशा है कि यह मदद करता है:

$routeProvider 
.when('...', {}) 
.otherwise({ 
    redirectTo: function() { 
    window.location = location.pathname; 
}}); 

का उपयोग कर:
1.3.10/Angular.js
1.3.10/कोणीय route.js

संबंधित मुद्दे