我正在将 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);
}
}