2015-03-25 23 views
12

की 'की जगह ले' जब ui रूटर के साथ html5Mode उपयोग करने के लिए कोशिश कर रहा उपरोक्त त्रुटि हो रही है। क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?लेखन त्रुटि: संपत्ति पढ़ा नहीं जा सकता अपरिभाषित

TypeError: Cannot read property 'replace' of undefined 
    at bd (angular.js:10555) 
    at Object.<anonymous> (angular.js:11403) 
    at l.$get.l.$digest (angular.js:14222) 
    at l.$get.l.$apply (angular.js:14493) 
    at angular.js:1449 
    at Object.e [as invoke] (angular.js:4182) 
    at d (angular.js:1447) 
    at sc (angular.js:1467) 
    at Jd (angular.js:1361) 
    at HTMLDocument.<anonymous> (angular.js:26086) 

कि angular.js में खंड है:

10554 function trimEmptyHash(url) { 
10555 return url.replace(/(#.+)|#$/, '$1'); 
10556 } 

मार्ग फ़ाइल:

(function(){ 

    'use strict'; 

    angular 
     .module('app') 
     .config(routes); 

     routes.$inject = ['$stateProvider', '$locationProvider']; 

     function routes($stateProvider, $locationProvider) { 

      // Configure app states 
      $stateProvider 

       .state('app', { 
        abstract: true, 
        templateUrl: 'modules/app/app.html',     
        controller: 'AppController' 
       }) 

       .state('app.home', { 
        url: '/', 
        templateUrl: 'modules/home/index.html' 
       }); 

      $locationProvider.html5Mode(true); 
     } 
})(); 

मैं html में आधार यूआरएल निर्धारित किया है:

<base href="/app/" /> 
+0

http://stackoverflow.com/questions/28859276/locationprovider-html5modetrue-issues और http://stackoverflow.com/questions/21863670/case-insensitivity-with-angularjs-ui-router –

+0

ये समाधान नहीं हैं काम करने लगते हैं। मेरे सभी यूआरएल वैसे भी कम मामले में हैं, इसलिए मुझे यकीन नहीं है कि यह लागू है। – babbaggeii

+1

तो 'url' अपरिभाषित है।स्टैक ट्रेस को देखें और देखें कि 'trimEmptyHash' कौन कॉल कर रहा है। वह कोड ढूंढें जो इसे सेट करना है और देखें कि यह अपरिभाषित क्यों है। –

उत्तर

0

आपका राज्य 'ऐप' में कोई यूआरएल कुंजी परिभाषित नहीं है घ।

-5

आप html फ़ाइल

<base href="/app/" /> 

से दूर करने के लिए है और इस app.js कोड से

$locationProvider.html5Mode(true); 
+4

हां, इससे मदद मिलती है, लेकिन यदि आप अपने ग्राहकों को अपने सुंदर यूआरएल से प्रभावित नहीं करना चाहते हैं। – trysis

+2

शानदार! जब मैं इसका उपयोग करने की कोशिश कर रहा हूं तो मैं html5Mode को हटा दूंगा! क्या आपने सवाल भी पढ़ा है? – Silveraven

11

मैं एक ही मुद्दे में भाग गया, और मेरे मामले अपरिभाषित "Url" बहस में trimEmptyHash() को पारित किया जा रहा है अंततः इस तथ्य से आ रहा था कि $ $ absUrl प्रस्ताव $ स्थान पर शुरू नहीं हो रहा था। आगे बढ़ते हुए, ऐसा लगता है कि $$ absUrl आमतौर पर $$ compose() विधि में प्रारंभ होता है, जिसे आम तौर पर $$ parse() से बुलाया जाता है जिसे आम तौर पर $$ parseLinkUrl() विधि कहा जाता है। यहाँ $$ parseLinkUrl() (कोणीय 1.4.1 पर देख रहे हैं) है:

this.$$parseLinkUrl = function(url, relHref) { 
    if (relHref && relHref[0] === '#') { 
    // special case for links to hash fragments: 
    // keep the old url and only replace the hash fragment 
    this.hash(relHref.slice(1)); 
    return true; 
    } 
    var appUrl, prevAppUrl; 
    var rewrittenUrl; 

    if ((appUrl = beginsWith(appBase, url)) !== undefined) { 
    prevAppUrl = appUrl; 
    if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) { 
     rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl); 
    } else { 
     rewrittenUrl = appBase + prevAppUrl; 
    } 
    } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) { 
    rewrittenUrl = appBaseNoFile + appUrl; 
    } else if (appBaseNoFile == url + '/') { 
    rewrittenUrl = appBaseNoFile; 
    } 
    if (rewrittenUrl) { 
    this.$$parse(rewrittenUrl); 
    } 
    return !!rewrittenUrl; 
}; 

मेरे मामले में, अंतिम एक "अगर" खंड कॉल ट्रिगर नहीं कर रहा था, पार्स $$ क्योंकि "rewrittenUrl" करने के लिए नहीं मिला मूल्य, क्योंकि यदि मध्य में खंडों को सही करने के लिए हल किया गया है तो कोई भी नहीं। मेरे मामले में, ऐसा इसलिए था क्योंकि यूआरएल (CompanyName/admin.html) की सेवा के लिए मैं जिस यूआरएल का उपयोग कर रहा था वह वास्तव में बेस Href से ऊपर था जिसे मैंने ऐप (कंपनीनाम/एडमिन /) के लिए सेट किया था, इसलिए कोई भी सशर्त सत्य को हल नहीं किया गया था । जैसे ही मैंने अपना बेस Href केवल कंपनीनाम/में बदल दिया, मैं अब इस मुद्दे में भाग नहीं पाया।

वैकल्पिक रूप से, आप स्थान प्रोटोटाइप पर $$ absUrl प्रारंभ कर सकते हैं, या कोणीय से कुछ प्रकार के फिक्स के लिए प्रतीक्षा कर सकते हैं - this issue देखें, और 30 मार्च को जोएलएमडीवी द्वारा प्रस्तावित कार्यवाही देखें।

+2

मैं विश्वास नहीं कर सकता कि कोणीय टीम ने ऐसा किया था। यह सब कुछ सरल रूटिंग से अधिक कुछ भी साइटों पर एचटीएमएल 5 मोड को अस्वीकार करता है, उदाहरण के लिए रेल या एएसपी.नेट साइटें जहां सार्वजनिक फ़ोल्डर रूटिंग फाइलों के समान स्थान पर भी नहीं है। – trysis

+0

क्षमा करें, मैं अपनी आखिरी टिप्पणी पर सही नहीं था। कोणीय के एचटीएमएल 5 मोड के साथ रेल का उपयोग करना संभव है, लेकिन यह टीमों और परीक्षणों के लिए कठिन बनाता है, क्योंकि उनके पास रूट नहीं होंगे और पुराने एपीआई का उपयोग करना चाहिए। फिर फिर, ग्राहक शायद इन्हें नहीं देख पाएंगे, और उम्मीद है कि टीमों के समय उनके मार्ग स्थापित होंगे। – trysis

6

मैं इस में ठीक उसी देख रहा था: ui-router on GitHub एक बार जब आप सर्वर साइड मार्ग कॉन्फ़िगर करते हैं, सब कुछ ठीक है जब तक आप इस तरह यूआरएल के साथ आप साइट खोलने से बचें के रूप में काम करना चाहिए TypeError: Cannot read property 'replace' of undefined त्रुटि html5mode भी उपयोग करते समय, जब तक मैं बदल दिया है:

<base href="app/" /> 

<base href="/app/" /> 
को

नोट, मिस्ड पिछले स्लैश। उम्मीद है कि यह किसी की मदद कर सकता है।

+4

मैंने इसे दो बार चेक किया, और मेरे पास/पहले के रूप में/पहले था, लेकिन मेरी समस्या का कारण क्या था, यह मामला संवेदनशील था! सुनिश्चित करें कि यह सब लोअरकेस है, जिसने मेरी समस्या तय की है – Gillardo

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