$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 и является простой частной сервисной службой.

Рекомендации

Другие вопросы по тегам