The rationale of this change is to improve the inter-operability with web
components that might make use of the `<template>` tag.
DEPRECATION
The template tags and template attribute are deprecated:
    <template ngFor [ngFor]=items let-item><li>...</li></template>
    <li template="ngFor: let item of items">...</li>
should be rewritten as:
    <ng-template ngFor [ngFor]=items let-item><li>...</li></ng-template>
Note that they still be supported in 4.x with a deprecartion warning in
development mode.
MIGRATION
- `template` tags (or elements with a `template` attribute) should be rewritten
as a `ng-template` tag,
- `ng-content` selectors should be updated to referto a `ng-template` where they
use to refer to a template: `<ng-content selector="template[attr]">` should be
rewritten as `<ng-content selector="ng-template[attr]">`
- if you consume a component relying on your templates being actual `template`
elements (that is they include a `<ng-content selector="template[attr]">`). You
should  still migrate to `ng-template` and make use of `ngProjectAs` to override
the way `ng-content` sees the template:
`<ng-template projectAs="template[attr]">`
- while `template` elements are deprecated in 4.x they continue to work.
		
	
			
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright Google Inc. All Rights Reserved.
 | 
						|
 *
 | 
						|
 * 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 {Component, NgModule, OnInit, TemplateRef, ViewChild} from '@angular/core';
 | 
						|
import {BrowserModule} from '@angular/platform-browser';
 | 
						|
import {Subject} from 'rxjs/Subject';
 | 
						|
 | 
						|
 | 
						|
// #docregion NgTemplateOutlet
 | 
						|
@Component({
 | 
						|
  selector: 'ng-template-outlet-example',
 | 
						|
  template: `
 | 
						|
    <ng-container *ngTemplateOutlet="greet"></ng-container>
 | 
						|
    <hr>
 | 
						|
    <ng-container *ngTemplateOutlet="eng; context: myContext"></ng-container>
 | 
						|
    <hr>
 | 
						|
    <ng-container *ngTemplateOutlet="svk; context: myContext"></ng-container>
 | 
						|
    <hr>
 | 
						|
    
 | 
						|
    <ng-template #greet><span>Hello</span></ng-template>
 | 
						|
    <ng-template #eng let-name><span>Hello {{name}}!</span></ng-template>
 | 
						|
    <ng-template #svk let-person="localSk"><span>Ahoj {{person}}!</span></ng-template>
 | 
						|
`
 | 
						|
})
 | 
						|
class NgTemplateOutletExample {
 | 
						|
  myContext = {$implicit: 'World', localSk: 'Svet'};
 | 
						|
}
 | 
						|
// #enddocregion
 | 
						|
 | 
						|
 | 
						|
@Component({
 | 
						|
  selector: 'example-app',
 | 
						|
  template: `<ng-template-outlet-example></ng-template-outlet-example>`
 | 
						|
})
 | 
						|
class ExampleApp {
 | 
						|
}
 | 
						|
 | 
						|
@NgModule({
 | 
						|
  imports: [BrowserModule],
 | 
						|
  declarations: [ExampleApp, NgTemplateOutletExample],
 | 
						|
  bootstrap: [ExampleApp]
 | 
						|
})
 | 
						|
export class AppModule {
 | 
						|
}
 |