$templateCache в Angular 2?
В Angular 1 мы используем $templateCache как способ избежать XHR'а вниз каждого шаблона с сервера при загрузке нашего приложения. В Angular 2 такой механизм, похоже, не готов.
Что я могу сделать, это заменить XHR в компиляторе:
function myXhr() {};
myXhr.prototype.get = function(url) {
return new Promise(function(resolve, reject) {
$.ajax({
url:url,
method:'GET',
success:resolve,
error:reject
});
});
};
ng.platform.browser.bootstrap(MyApp, [
ng.core.provide(ng.compiler.XHR, {useClass:myXhr})
]);
А затем настройте мой геттер XHR, чтобы сначала проверить локальный кеш. Это предпочтительный подход?
2 ответа
Я привык использовать строки шаблонов в машинописи для всех моих компонентов. Мне очень удобно иметь HTML и логику просмотра в одном файле TS. Вы также можете посмотреть на загрузчик / упаковщик модулей, такой как JSPM или WebPack. Эти отличные инструменты сборки встраивают все ваши шаблоны в ваши сборки, используя синтаксис модуля, как показано ниже:
let html = require('./about.html!text');
@Component({
selector:"my-about",
template:html
})
Кеш в Angular2 работает следующим образом:
уровень приложения: метод включен
ViewContainerRef
называется (например,ViewContainerRef.createComponent
).reflector.registerType
регистрирует тип компонента как аннотациюComponentResolver.resolveComponent
теперь возвращаетComponentFactory
ComponentResolver.resolveComponent
сначала проверяет аннотации типа перед возвратом обещания
Первоначальный дизайн в Angular 2.0 Alpha:
ProtoView - это прототипное представление, являющееся результатом компиляции шаблона и используемое Angular для эффективного создания экземпляра этого представления на основе скомпилированного шаблона.
RenderProtoViewRef является аналогом ProtoViewRef, доступным в контексте приложения. Но в отличие от ProtoViewRef, RenderProtoViewRef содержит все статические вложенные Proto Views, которые рекурсивно объединяются в один Render Proto View.
Больше невозможно реализовать ng-include. Компилятору требуется ComponentDirective для компиляции HTML. Следовательно, вы не можете самостоятельно скомпилировать HTML и включить его в представление.
Соответствующие изменения с момента начальной версии Angular 2.0 Beta:
Компилятор переименован в ComponentResolver, Compiler.compileInHost был переименован в ComponentResolver.resolveComponent.
Интерфейс рендерера теперь работает на простых нативных узлах вместо RenderElementRefs или RenderViewRefs
AppViewManager переименован в ViewUtils и является простой частной сервисной службой.
Рекомендации