2015-02-24 47 views
1

這對於那些你們誰能夠從使用angular.dart V1.1.0一個飛鏢應用程序創建一個可以工作的PhoneGap應用問題angular.dart - 相對URL解析需要一個有效的基本URI

我製作了一個非常簡單的Dart應用程序。它只有一個包含三個文件的「web」目錄:用於Phonegap的index.html,main.dart和config.xml。

中的index.html包含body標籤的末尾:

<script type="application/dart" src="main.dart"></script> 
<script data-pub-inline src="packages/browser/dart.js"></script> 

的main.dart包含:

import 'dart:html'; 
import 'package:angular/angular.dart'; 
import 'package:angular/application_factory.dart'; 

class AppModule extends Module{ 
    AppModule(){ 

    } 
} 

void main() { 
    applicationFactory().addModule(new AppModule()).run(); 
} 

的pubspec.yaml文件包含此:

name: test_app 
version: 0.0.1 
description: A test app. 
environment: 
    sdk: '>=1.0.0 <2.0.0' 
dependencies: 
    angular: any 
    browser: any 
transformers: 
    - angular 

config.xml的內容是:

<?xml version="1.0" encoding="UTF-8" ?> 
<widget xmlns = "http://www.w3.org/ns/widgets" 
    xmlns:gap = "http://phonegap.com/ns/1.0" 
    id   = "com.test.app.example" 
    versionCode = "10" 
    version  = "1.0.0" > 

    <name>TestApp PhoneGap Example</name> 

    <description> 
     An example of phonegap app. 
    </description> 

    <author href="https://build.phonegap.com">Me</author> 

    <gap:platform name="android" /> 

    <access origin="*"/> 
</widget> 

我使用pub構建來構建這個應用程序。這會生成一個包含Web目錄的構建目錄。我用web目錄的內容創建一個.zip文件。我將zip文件上傳到生成.apk文件的phonegap build。我將.apk文件安裝到手機中,使用USB電纜將手機連接到筆記本電腦以進行Chrome調試。我開始應用程序。

「網絡」選項卡中顯示,一切都是爲了:

file:///android_asset/www/index.html 
file:///android_asset/www/packages/browser/dart.js 
file:///android_asset/www/main.dart.js 
Request method GET, Status code: 200 

的問題是,在控制檯顯示:相對URL解析需要一個有效的基本URI

所以應用程序無法正常工作。如果我要使用組件,裝飾器等,它們將不會被使用,因爲這個錯誤。我沒有這個問題,如果我使用angular.dart v0.14.0或如果我在Dartium中運行應用程序。

因此有沒有人遇到過這個問題?如果是這樣,有沒有人找到解決這個問題的辦法?

我用飛鏢1.8.5和1.1.0 angular.dart

我已經看到了這一點:https://github.com/angular/angular.dart/commit/d929109333fe2370f5156df2204177ce37aa5bc0 但它似乎創造出比固定他們更多的問題。

在此先感謝!

回答

1

現在我可以通過使用包裝類覆蓋ResourceUrlResolver類來使它工作。見原_getBaseUri()方法:

file://packages/angular/core_dom/resource_url_resolver.dart 

因此,創建類似於包裝文件:

resource_url_resolver_wrapper.dart 

導入所有需要的庫到它:

import 'dart:html'; 
import 'package:angular/angular.dart'; 
import 'package:angular/core_dom/type_to_uri_mapper.dart'; 

複製整個ResourceUrlResolver並將其重命名爲:

class ResourceUrlResolverWrapper implements ResourceUrlResolver 

變化_getBaseUri()這樣的:

static String _getBaseUri() { 
    return "${Uri.base.scheme}://${Uri.base.authority}/"; 
} 

現在去你main.dart文件:

import 'package:yourApp/wrapper/location/resource_url_resolver_wrapper.dart'; 

這添加到應用程序模塊:

bind(ResourceResolverConfig, toValue: new ResourceResolverConfig.resolveRelativeUrls(false)); 
bind(ResourceUrlResolver, toImplementation: ResourceUrlResolverWrapper); 

這是它應該如何:

import 'package:angular/angular.dart'; 
import 'package:angular/application_factory.dart'; 
import 'package:yourApp/wrapper/location/resource_url_resolver_wrapper.dart'; 

class AppModule extends Module{ 
    AppModule(){ 
     bind(ResourceResolverConfig, toValue: new ResourceResolverConfig.resolveRelativeUrls(false)); 
     bind(ResourceUrlResolver, toImplementation: ResourceUrlResolverWrapper); 
    } 
} 

void main(){ 
    applicationFactory().addModule(new AppModule()).run(); 
} 

現在,您可以構建應用程序,將其壓縮並上傳到Phonegap版本。將它安裝在您的手機上,它會起作用。也許這會打破別的東西。就我而言,它適用於Phonegap構建。

我希望找到一個更好的解決方案,所以也許別人可以分享一個更清潔的解決方案。

謝謝

+1

這是現在實施的最新版本,但我仍然有同樣的問題 – youssef 2015-05-12 21:18:38