2014-04-24 15 views
9

के साथ एचटीएमएल 5 मोड मैं AngularJS html5 मोड (सत्य) फोनगैप के साथ काम करने की कोशिश कर रहा हूं। मैं इस पोस्ट करने के लिए, मैं विन्यास के विभिन्न संयोजन की कोशिश की पहले, < आधार/> मेटा में टैग (भी < आधार href के साथ की कोशिश की = "जोड़ने से खोज की एक बहुत कुछ किया"/>, < आधार href = "/"/> और < आधार href = "/" target = "_ स्वयं"/>), , मार्ग अंतिम बिंदुओं को .html प्रत्यय जोड़ने $ delegate.history जोड़ने = false (अनुसरण) की तरह .config ब्लॉक के अंदरफोनगैप और कोणीय जेएस

$provide.decorator('$sniffer', function($delegate) { 
    $delegate.history = false; 
    return $delegate; 
}); 

और स्पष्ट रूप से

$locationProvider.hashPrefix('!'); 
$locationProvider.html5Mode(true); 

लेकिन इसे काम करने का कोई तरीका नहीं है, टैग को जोड़ने और एचटीएमएल 5 मोड को सत्य में सेट करने के परिणामस्वरूप आवेदन शुरू होने पर रिक्त स्क्रीन होगी। इसके अलावा उनमें से एक को एक ही परिणाम, रिक्त स्क्रीन पर लाएगा।

के साथ आधार टैग को जोड़ने से "android_asset"

का पालन सही ढंग से कर देगा मुख्य नियंत्रक लोड लेकिन फिर मार्ग टूट जाता है की तरह ....

लक्ष्य विशेषता को "_blank" और "_self साथ परीक्षण किया गया "मूल्य ...

तो मेरा सवाल है, क्या फोन 5 और फोनुलैप और एंगुलरजेएस का उपयोग कर एचटीएमएल 5 मोड सक्षम किया जा सकता है?

मैं AngularJS 1.2.16 के साथ कॉर्डोबा संस्करण 3.4.1-0.1.0, 4.0.4 वास्तविक डिवाइस एंड्रॉयड पर परीक्षण किया और एंड्रॉयड 4.4.2 AVD

किसी भी सलाह बहुत सराहना की जाएगी उपयोग कर रहा हूँ! धन्यवाद

उत्तर

9

मेरे अनुभव के आधार पर और रेमंड कैमडेन (जो फोनगैप पर काम करता है) से this comment पर फोनगैप + कोणीय के साथ html5mode का उपयोग करना संभव नहीं है।

+0

धन्यवाद स्टीव, कम से कम एक पुष्टि जो संभव नहीं है। क्या आप जानते हैं कि पहले से ही समाप्त हो चुके AngularJS एप्लिकेशन को फोनगैप पर पोर्ट करने के लिए कोई वर्कअराउड है जो html5 मोड का उपयोग करता है? –

+0

मैंने जो कुछ किया है वह पहले से ही 5 एचटीएमएल 5 मोड बंद कर दिया गया है। किसी भी मामले में फोनगैप के तहत यह बहुत बेकार है! –

+1

मैं आपके साथ सहमत हूं, फोनगैप के तहत यह कोई समझ नहीं आता है, मैं कभी भी अन्यथा कहना नहीं चाहता था। मेरा मुद्दा यह है कि अगर मेरे पास पहले से ही समाप्त हो गया एप्लिकेशन है जो एचटीएमएल 5 मोड का उपयोग करता है तो फोनगैप पर पोर्टिंग यह सीधे नहीं है ... वैसे भी, आपके उत्तर के लिए धन्यवाद! –

2

किसी मौजूदा वेबसाइट के साथ इस समस्या को हल करने के लिए, मैं बिल्ड समय पर एक कोणीय स्थिरता जोड़ता हूं जो इंगित करता है कि बिल्डिंग फोनगैप के लिए है या नहीं। कॉन्फ़िगरेशन समय पर आप स्थिरांक तक पहुंच सकते हैं और HTML5mode लागू करना चुन सकते हैं।

//Add this portion via your build scripts e.g. grunt or gulp 
//make the constant change depending on if this is a Phonegap build or not 
angular.module('myAppConstants', []).constant('PhonegapConstant', true); 

//How to use 
angular.module('myApp', ['myAppConstants']).config(function(
    $locationProvider, 
    PhonegapConstant 
) { 
    if(!PhonegapConstant) { 
     $locationProvider.html5mode(true); 
     $locationProvider.hashPrefix('!'); 
    } 
}); 
+0

हाँ लेकिन सभी लिंक के बारे में कैसे? यदि एक लिंक टेम्पलेट में है तो मुझे इसका उपयोग करना होगा/और यह स्पष्ट रूप से फोनगैप ऐप तोड़ देता है। क्या कुछ ट्यूटोरियल हैं कोणीय/फोनगैप के लिए एकल कोडबेस का प्रबंधन कैसे करें? – Toolkit

+0

@ टुल्ककिट यदि आप नियमित एचटीएमएल 5 मोड लिंक का उपयोग करते हैं तो आप [यह एक तत्व निर्देश] (https://gist.github.com/BrainBacon/2700df3a8d8a83d19a57) का उपयोग कर सकते हैं, दोनों देशी और ब्राउज़र अनुप्रयोगों में लिंक का समर्थन करने के लिए। –

+0

वास्तव में मैं अब ui-sref = "लॉगिन" शैली का उपयोग कर रहा हूँ – Toolkit

0

मैं सिर्फ यह मिल गया है AngularJS 1.5, नए घटक रूटर के साथ काम करने, और कॉर्डोबा (phonegap) 6.0।

  1. अपने html फ़ाइल से <base href="/"> टैग निकालें:

    इसकी एक सा hacky, लेकिन यहाँ मैं करना था क्या।

  2. सेट एचटीएमएल 5 मोड झूठी
को requireBase सेट करते समय

$locationProvider.html5Mode({ enabled: true, requireBase: false });

  1. पकड़ने कॉर्डोबा (phonegap) मार्गों

    // iOS Cordova catcher 
    // 
    { 
        path: '/var/**', 
        component: 'cordova' 
    }, 
    // Android Cordova catcher 
    // 
    { 
        path: '/android_asset/www/index.html', 
        component: 'cordova' 
    } 
    
  2. एक कॉर्डोबा बनाओ घटक जो तब भी आप जहां भी चाहें reroutes।

    if(cookieService.loggedIn()) { 
         $rootRouter.navigate(['Newsfeed']); 
        } 
        else { 
         $rootRouter.navigate(['Title']); 
        } 
    

अब आप अपने मार्गों के बाकी आप सामान्य रूप से उपयोग कर सकते हैं। मैं इस विधि के साथ एक मुद्दे के खिलाफ आया था, हालांकि, मेरी सभी स्थानीय छवियों और svgs को एंड्रॉइड के लिए पूर्ण पथ,/android_asset/www/images से शुरू करने की आवश्यकता है, इसलिए मैंने थोड़ा फ़िल्टर बनाया जो उचित संपत्ति पथ को थकाता है वेब, एंड्रॉइड, और आईओएस।