feat(compiler): Add a enableLegacyTemplate
option to support <template>
When the `enableLegacyTemplate` is set to `false`, `<template>` tags and the `template` attribute are no more used to define angular templates but are treated as regular tag and attribute. The default value is `true`. In order to define a template, you have to use the `<ng-template>` tag. This option applies to your application and all the libraries it uses. That is you should make sure none of them rely on the legacy way to defined templates when this option is turned off (`false`).
This commit is contained in:

committed by
Igor Minar

parent
bf8eb41248
commit
e99d721612
@ -5,6 +5,7 @@
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
import {CompilerConfig} from '@angular/compiler';
|
||||
import {CompileAnimationEntryMetadata, CompileDiDependencyMetadata, CompileDirectiveMetadata, CompileDirectiveSummary, CompilePipeMetadata, CompilePipeSummary, CompileProviderMetadata, CompileTemplateMetadata, CompileTokenMetadata, CompileTypeMetadata, tokenReference} from '@angular/compiler/src/compile_metadata';
|
||||
import {DomElementSchemaRegistry} from '@angular/compiler/src/schema/dom_element_schema_registry';
|
||||
import {ElementSchemaRegistry} from '@angular/compiler/src/schema/element_schema_registry';
|
||||
@ -44,8 +45,13 @@ export function main() {
|
||||
function commonBeforeEach() {
|
||||
beforeEach(() => {
|
||||
console = new ArrayConsole();
|
||||
TestBed.configureCompiler({providers: [{provide: Console, useValue: console}]});
|
||||
TestBed.configureCompiler({
|
||||
providers: [
|
||||
{provide: Console, useValue: console},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
beforeEach(inject([TemplateParser], (parser: TemplateParser) => {
|
||||
const someAnimation = new CompileAnimationEntryMetadata('someAnimation', []);
|
||||
const someTemplate = new CompileTemplateMetadata({animations: [someAnimation]});
|
||||
@ -2023,6 +2029,47 @@ The pipe 'test' could not be found ("{{[ERROR ->]a | test}}"): TestComp@0:2`);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Template Parser - opt-out `<template>` support', () => {
|
||||
beforeEach(() => {
|
||||
TestBed.configureCompiler({
|
||||
providers: [{
|
||||
provide: CompilerConfig,
|
||||
useValue: new CompilerConfig({enableLegacyTemplate: false}),
|
||||
}],
|
||||
});
|
||||
});
|
||||
|
||||
commonBeforeEach();
|
||||
|
||||
it('should support * directives', () => {
|
||||
expect(humanizeTplAst(parse('<div *ngIf>', [ngIf]))).toEqual([
|
||||
[EmbeddedTemplateAst],
|
||||
[DirectiveAst, ngIf],
|
||||
[BoundDirectivePropertyAst, 'ngIf', 'null'],
|
||||
[ElementAst, 'div'],
|
||||
]);
|
||||
});
|
||||
|
||||
it('should support <ng-template>', () => {
|
||||
expect(humanizeTplAst(parse('<ng-template>', []))).toEqual([
|
||||
[EmbeddedTemplateAst],
|
||||
]);
|
||||
});
|
||||
|
||||
it('should treat <template> as a regular tag', () => {
|
||||
expect(humanizeTplAst(parse('<template>', []))).toEqual([
|
||||
[ElementAst, 'template'],
|
||||
]);
|
||||
});
|
||||
|
||||
it('should not special case the template attribute', () => {
|
||||
expect(humanizeTplAst(parse('<p template="ngFor">', []))).toEqual([
|
||||
[ElementAst, 'p'],
|
||||
[AttrAst, 'template', 'ngFor'],
|
||||
]);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function humanizeTplAst(
|
||||
|
Reference in New Issue
Block a user