我正在使用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);
}
}
答案 0 :(得分:4)
您可以实施自定义UrlRewriter
。通过角度Http
服务获取的所有资源都会调用UrlRewriter
,包括模板和CSS。
class MyUrlRewriter implements UrlRewriter {
String call(String url) {
if (url.startsWith('/static/')) {
return _rewriteCdnUrl(url);
}
return url;
}
}
myModule.type(UrlRewriter, implementedBy: MyUrlRewriter);