4

私は私の新しいアプリケーションに AngularDart を使用しています。次のようにコンポーネントを設定しています。

@NgComponent(
    selector: 'game-timeline',
    templateUrl: '/static/dart/game/web/views/timelineview.html',
    cssUrl: '/static/dart/game/web/views/timelineview.css',
    publishAs: 'ctrl'
)

しかし、私の問題は、テンプレートと css の場所がビルド時に必ずしもわかっていないことです。それらは、一意のデプロイ識別子を持つ CDN 上にあります。何かのようなもの...

http://cdn.domain.com/static/30294832098/dart/game/web/views/timelineview.html

そして、その数はデプロイごとに異なります。

パスは、ホストされている html ページからの相対パスのようです。これは CDN にはありません。そのため、相対パス (../blah/blah) だけを使用することはできません。

ページに JS 変数を挿入して、静的ルートがどこにあるかを教えてくれます。

メインの .dart/.js ファイルは CDN から読み込まれますが、それを基準にすることはできません。

何か案は?

更新、ページ上の STATIC_URL と呼ばれる js 変数を読み取る pavelgj の優れた回答から適応した私の完全なソリューションを次に示します。

import 'package:angular/angular.dart';
import 'package:js/js.dart' as js;

class CDNRewriter implements UrlRewriter {
  String staticUrl;

  CDNRewriter() {
    var context = js.context;
    staticUrl = js.context.STATIC_URL;
  }

  String call(String url) {
    if (url.startsWith('/static/')) {
      return _rewriteCdnUrl(url);
    }
    return url;
  } 

  String _rewriteCdnUrl(String url) {
    return url.replaceFirst(new RegExp(r'/static/'), staticUrl);
  }
}
4

1 に答える 1