Мне нужно эквивалентное решение для angular1.x $templateCache
: В начале приложения мне нужно перевести и настроить все виды html в зависимости от профиля пользователя, роли, разрешений, языка и текущего местоположения. Я хочу выполнить это на стороне сервера с помощью синтаксиса и инструментов ASP.NET Razor в одном запросе (не в одном для каждого компонента). Этот запрос должен поместить все готовые к использованию шаблоны в кэш-память стороннего пользователя. С этого момента каждый компонент, который ссылается на свой шаблон, будет сначала загружен из этого кеша, если он доступен. В Angular1.x можно было легко загрузить весь шаблон в один запрос, разделенный <script id="myView.html" type="text/ng-template">...</script>
. Перед тем, как поместить их в кеш, мне пришлось скомпилировать каждый шаблон, вызвав $compiler()
. Как это сделать в Angular2? Одним из возможных решений я мог представить, если Angular2 поддерживает компонент templateUrl
как function()
. Таким образом, я мог бы создать собственный кеш.
1
A
ответ
1
После некоторого исследования и копания в исходном коде angular2, этот $templateCache in Angular 2? указал мне на правильное решение. Я должен зарегистрировать новый НТТР и собственную реализацию XHR с помощью обеспечения():
providers: [HTTP_PROVIDERS,
provide(Http, {
useFactory: (xhrBackend: XHRBackend, requestOptions: RequestOptions) => new HttpInterceptor(xhrBackend, requestOptions),
deps: [XHRBackend, RequestOptions]
}),
provide(XHR, {
useFactory: (http: Http) => new XHRInterceptor(http), deps: [Http]
})],
XHRInterceptor (реализация интерфейса XHR) впрыскивается и внутренне используемый angular2 каждый раз angular2 загружает HTML temlates через tempateUrl Compontent в. Поскольку мы вводим нашу собственную реализацию Http в XHRInterceptor конструктору и передавать все получают запросы через HttpInterceptor мы получаем полный контроль над всеми запросами HTTP из нашего приложения:
export class XHRInterceptor extends XHR {
constructor(private _http: Http) {
super()
}
get(url: string): Promise<string> {
var completer: PromiseCompleter<string> = PromiseWrapper.completer();
this._http.get(url).map(data=> {
return data.text();
}).subscribe(data => {
completer.resolve(data);
}, error=>{
completer.reject(`Failed to load ${url}`, null);
});
return completer.promise;
}
}
и это мой HttpInterceptor класс:
export class HttpInterceptor extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
super(backend, defaultOptions);
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
if (typeof url === "string") {
return this.interceptResult(super.request(this.interceptUrl(url), this.interceptOptions(options)));
} else {
return this.interceptResult(super.request(url, this.interceptOptions(options)));
}
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
return this.interceptResult(super.get(this.interceptUrl(url), this.interceptOptions(options)));
}
post(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {
return this.interceptResult(super.post(this.interceptUrl(url), body, this.interceptOptions(options)));
}
put(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {
return this.interceptResult(super.put(this.interceptUrl(url), body, this.interceptOptions(options)));
}
delete(url: string, options?: RequestOptionsArgs): Observable<Response> {
return this.interceptResult(super.delete(this.interceptUrl(url), this.interceptOptions(options)));
}
interceptUrl(url: string): string {
// Do some stuff with the url....
//...
return url;
}
interceptOptions(options?: RequestOptionsArgs): RequestOptionsArgs {
// prepare options...
if (options == null) {
options = new RequestOptions();
}
if (options.headers == null) {
options.headers = new Headers();
}
// insert some custom headers...
// options.headers.append('Content-Type', 'application/json');
return options;
}
interceptResult(observable: Observable<Response>): Observable<Response> {
// Do some stuff with the result...
// ...
return observable;
}
}
Смежные вопросы
- 1. AngularJS TemplateCache
- 2. Angularjs выбрать в templateCache
- 3. $ templateCache в Angular 2?
- 4. Как исправить пути шаблона в templateCache? (Проглатывать-угловую-templatecache)
- 5. Angularjs Добавление данных в templateCache
- 6. ng-include и $ templateCache
- 7. 1 $ templateCache, 2 модуля
- 8. httpParamSerializerJQLike в угловом2?
- 9. Реализовать мастера в угловом2?
- 10. Выбор цвета в угловом2
- 11. Константа приложения в угловом2?
- 12. Вложенные компоненты в угловом2
- 13. Угловые $ templatecache name конфликты
- 14. AngularJS - $ templateCache не определен
- 15. Загрузить $ templateCache из файла
- 16. Угловой не использовать templatecache
- 17. Где я должен использовать $ templateCache?
- 18. Gulp Angular build templateCache issue
- 19. Gulp angular templatecache root issue
- 20. аккордеон (ng2-аккордеон) в угловом2
- 21. Какова альтернатива angular.isString() в угловом2?
- 22. Общее: асинхронная валидация в угловом2
- 23. Как сделать маршрутизацию в угловом2?
- 24. Как сделать поиск в угловом2?
- 25. Изменить стиль псевдоэлементов в угловом2
- 26. $$ hashKey для объекта в угловом2?
- 27. Как использовать угловой2_материал в угловом2?
- 28. предупреждение о декораторе в угловом2?
- 29. Как смотреть изменения в угловом2?
- 30. Главный вид детали в угловом2?