Я использую 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, который читается в переменной js с именем STATIC_URL на странице.
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);
}
}