angular.dart - 相对URL解析需要一个有效的基本URI(angular.dart -

2019-10-22 01:50发布

这对于那些你们谁能够从使用angular.dart V1.1.0一个飞镖应用程序创建一个可以工作的PhoneGap应用程序问题

我做了一个非常简单的飞镖应用程序。 它包含三个文件只是一个“网”目录:index.html的,main.dart和config.xml为PhoneGap的。

中的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>

我用酒馆构建构建这个应用程序。 这将生成包含web目录建立一个目录。 我创建一个web目录的内容的.zip文件。 我上传的zip文件的PhoneGap构建生成的.apk文件。 我的.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但它似乎创造出比固定他们更多的问题。

提前致谢!

Answer 1:

现在我是能够使通过使用包装类覆盖ResourceUrlResolver一流的IT工作。 看到原来_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的构建。

我希望能找到一个更好的解决方案,所以也许别人可以共享这个清晰的解决方案。

谢谢



文章来源: angular.dart - Relative URL resolution requires a valid base URI