Альтернативы $templateCache в Angular2
Когда мы думаем об использовании template
в Angular2 или Angular1.X мы знаем, что ниже приведен один из основных способов написания:
template: './template-ninja.html'
и с Angular1.X, мы можем предварительно кэшировать все шаблоны с $templateCache.put()
следующее:
var myApp = angular.module('Ninja', []);
myApp.run(function($templateCache) {
$templateCache.put('templateNinja.html', 'This is the content of the template-ninja');
});
что уменьшит количество http запросов. Я хотел бы знать, как я могу реализовать то же самое с Angular2. Кто-нибудь может помочь? Благодарю.
4 ответа
проглатывать-рядный NG2-шаблон
На данный момент лучшим решением является gulp-inline-ng2-template.
Это берет компонент с атрибутом templateUrl плюс html-файл и превращает его в компонент с встроенным шаблоном.
Я пока не знаю библиотеки или инструмента, которые будут кешировать шаблоны для Angular 2, но до сих пор я был рад просто использовать встроенные шаблоны вместо внешних файлов. Использование символа обратной черты es6 для шаблона позволяет писать многострочный HTML-код в JavaScript и хранить все в одном файле.
https://github.com/angular-in-action/chapter2/blob/master/client/components/dashboard.ts#L12
проглатывать-NG2-шаблонный обертку
Привет,
Надеюсь, что это будет полезно для вас: я только что написал небольшой модуль, который позволяет вам объединить все ваши HTML-файлы в один модуль ES6.
Используйте следующую альтернативу:
- Импортировать RuntimeCompiler, рефлектор, ComponentFactory, ComponentResolver, ReflectorComponentResolver и ReflectionInfo
- Внедрить RuntimeCompiler
- Создать экземпляр ComponentResolver
- Вызвать ComponentResolver.resolveComponent(SomeComponent)
- Проверьте отражатель.propMetadata для кэшированного результата
it('должен кешировать результат', inject([AsyncTestCompleter], (async) => { PromiseWrapper .all([ComponentResolver.resolveComponent(SomeComponent), ComponentResolver.resolveComponent(SomeComponent)]) .then((protoViewRefs) => { ожидать (protoViewRefs[0]) Тоба (protoViewRefs[1]). async.done(); }); }));
Аннотация это другой способ сделать это:
это ("должен прочитать шаблон из аннотации", inject([AsyncTestCompleter, Compiler], (async, compiler) => { ComponentResolver.resolveComponent(SomeComponent) .then((hostViewFactoryRef) => { ожидать (hostViewFactoryRef.internalHostViewFactory).toBe(someHostViewFactory); async.done(); }); }));
Рекомендации
- Angular2 Источник: RuntimeCompiler Spec - runtime_compiler_spec.ts
- Angular2 API: класс ProtoViewRef
- Angular2 Источник: публичные спецификации API
- npm modules: ng2cli - утилита CLI для генерации файлов Angular 2
- Angular2 Issue #6317, Feature Feature: некоторые аннотации внутри шаблонов, чтобы указать интерфейс, который им требуется.