2015-12-22 5 views
3

В Angular 1 мы используем $ templateCache как способ избежать XHR'инга каждого шаблона с сервера, когда мы загружаем наше приложение. В Угловом 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 поглотитель проверить локальный кэш первого. Это предпочтительный подход?

+1

Кажется дубликат http://stackoverflow.com/questions/34418914/alternatives-to-templatecache-in- angular2, хотя и спросил в тот же день и пока не решил. –

+0

По-прежнему нет хорошего решения для этого, просто много рук. – superluminary

ответ

2

Кэш Angular2 работает следующим образом:

  • приложение слой: метод на ViewContainerRef называется (например, ViewContainerRef.createComponent).

  • reflector.registerType регистрирует тип компонента в качестве аннотации

  • ComponentResolver.resolveComponent теперь возвращает ComponentFactory

  • ComponentResolver.resolveComponent сначала проверяет аннотацию типа перед возвратом обещания

Начальной конструкции в угловых 2,0 Альфа:

ProtoView - это прототип View, который является результатом компиляции Template и используется Angular для эффективного создания экземпляра этого представления на основе скомпилированного шаблона.

RenderProtoViewRef является аналогом ProtoViewRef, доступным в контексте приложения. Но в отличие от ProtoViewRef, RenderProtoViewRef содержит все статические вложенные Proto Views, которые рекурсивно объединены в один Render Proto View.

Невозможно реализовать ng-include. Для компиляции HTML компилятор требует ComponentDirective. Поэтому вы не можете самостоятельно компилировать HTML и включать его в представление.

Соответствующие изменения после первоначального углового 2.0 Beta:

Компилятор переименован в ComponentResolver, Compiler.compileInHost было переименованы в ComponentResolver.resolveComponent.

Renderer интерфейс в настоящее время действует на равнинных родные узлах, вместо RenderElementRefs или RenderViewRefs

AppViewManager переименован в ViewUtils и является лишь частными коммунальными услугами.

Список литературы

3

я привык к использованию строки шаблонов в машинописи для всех моих компонентов. Я считаю, что html и логика просмотра все в одном TS-файле очень удобны. Вы также можете посмотреть загрузчик/комплектщик модуля, например JSPM или WebPack. Эти большие инструменты для сборки тянуть все шаблоны в сборках с помощью синтаксиса модуля, как показано ниже:

let html = require('./about.html!text'); 
    @Component({ 
     selector:"my-about", 
     template:html 
    }) 
+0

Только то, что я ищу, и мне не нужно использовать абсолютные пути к шаблонам. Теперь, если только есть способ перевести это в синтаксис импорта es6? Благодарю. –

Смежные вопросы