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 加载的,但我似乎无法让它与此相关。

有任何想法吗?

更新,这是我的完整解决方案,改编自 pavelgj 的出色答案,该答案读取页面上名为 STATIC_URL 的 js 变量。

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

4

您可以实现自定义UrlRewriter. UrlRewriter调用通过角度服务获取的所有资源Http,包括模板和 css。

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

myModule.type(UrlRewriter, implementedBy: MyUrlRewriter);
于 2014-01-02T22:54:27.293 回答