2013-10-02 17 views
5

मैं एंगुलरजेएस में एक सिंगल पेज एप्लिकेशन बनाने की कोशिश कर रहा हूं जिसमें क्लाइंट-साइड रूटिंग एचटीएमएल 5 मोड में किया गया है। यदि उपयोगकर्ता कभी भी मेरी साइट पर किसी पृष्ठ को बुकमार्क करते हैं, तो मैं समझता हूं कि मुझे मूल सर्वर-साइड रूटिंग योजना की आवश्यकता है, लेकिन मैं वास्तव में हमेशा अपने एकल होमपेज की सेवा करना चाहता हूं और क्लाइंट-साइड रूटिंग टुकड़े पर उसी यूआरएल को प्रचारित करना चाहता हूं।एएसपी.नेट एमवीसी 4 रूट बुकमार्क किए गए कोणीय एसपीए यूआरएल

routes.MapRoute(
    "Default", // Route name 
    "{*catchall}", // URL with parameters 
    new { controller = "Home", action = "Index" } // Parameter defaults 
); 

उदाहरण URL: कोणीय भीतर

http://myapp.com/moreInfo 
http://myapp.com/contactUs 

"moreinfo" और "हमसे संपर्क करें" सिर्फ नाम हैं मार्गों

यह कैच-ऑल मार्ग सरल यूआरएल है कि केवल एक गहरी हैं पर पूरी तरह से काम करता है । सिंगल पेज एप्लिकेशन का एकमात्र वास्तविक प्रवेश बिंदु http://myapp.com पर है। अब तक, यह सब बहुत आसानी से काम करता है।

जब मैं एक से अधिक मार्ग गहरे जाने की कोशिश है, हालांकि, आवेदन अनंत लूप में चला जाता है:

http://myapp.com/user/5 

है इस वजह से मेरी सर्वर साइड मार्ग "साथ भेज देते हैं" को "पर्याप्त नहीं है उपयोगकर्ता/5 "मेरे क्लाइंट एप्लिकेशन के लिए यूआरएल? क्या मुझे यह सुनिश्चित करने के लिए कुछ भी करने की ज़रूरत है कि कोई फर्क नहीं पड़ता कि यूआरएल कितना गहराई से घिरा हुआ है, यह मेरे एसपीए के साथ ठीक से पारित हो जाता है?

उत्तर

10

समस्या रूटिंग कॉन्फ़िगरेशन के साथ नहीं है, मेरे पास कोणीय जेएस और एमवीसी 4 के साथ एक समान सेटअप है, और नीचे दिया गया मार्ग ठीक काम करता है।

routes.MapRoute(
    name: "Application", 
    url: "{*url}", 
    defaults: new { controller = "Home", action = "Index" }, 
    namespaces: new[] { "MyApp.Web.Controllers" }); 

क्या आपके पास कोणीय कॉन्फ़िगरेशन विधि में html5Mode सेट सही है?

$locationProvider.html5Mode(true); 

आप Fiddler से अपने ऐप्लिकेशन में GET अनुरोध भेजने के लिए और प्रतिक्रिया को देखने के लिए कोशिश कर सकते हैं। यदि यह 301 या 302 है, तो आपके पास सर्वर साइड रीडायरेक्शन लूप समस्या है। यदि यह 200 है, तो आपका कोणीय/जेएस कोड समस्या हो सकती है।

0

यदि मैं सही ढंग से समझता हूं, तो आप कोणीय में रूटिंग इंजन को '/ user/5' देना चाहते हैं। यदि ऐसा है, तो हैशर हैश के बाद मार्ग से संबंधित है। इसका मतलब यह है मार्ग आप चाहते हैं

http://myapp.com#/user/5 

है तुम भी तरह एक मार्ग के साथ ठीक से $ routeProvider कॉन्फ़िगर करने के लिए की आवश्यकता होगी:

angular.module('yourApp', []). 
    config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
     when('/user/:id', {templateUrl: 'SOME_HTML_FILE'}). 
     otherwise({redirectTo: '/'}); 
}]); 

फिर आप नियंत्रक में मार्ग परम बाहर निकलने के लिए की आवश्यकता होगी:

function someController($scope, $routeParams) { 
    if($routeParams.id){ 
     alert('Super Fly!'); 
    } 
} 
संबंधित मुद्दे