首页 > 代码库 > [Angular Directive] Create a Template Storage Service in Angular 2
[Angular Directive] Create a Template Storage Service in Angular 2
You need to define a <template>
to be able to use it elsewhere in your app as a TemplateRef
. You can store these TemplateRef
s in a Service and then access them from any @Directive
or @Component
in your app.
We want to create a service and a component together to store all the templates.
service:
import {Injectable, TemplateRef} from "@angular/core";@Injectable()export class TemplatesService { templates = new Map<string, TemplateRef<any>>();}
compoment:
import {Component, ViewChild} from "@angular/core";import {TemplatesService} from "./shared/services/templates.service";@Component({ selector: ‘template-storage‘, template: ` <template #header> <h1>This is header</h1> </template> <template #footer> <h1>This is the footer</h1> </template> `})export class TemplateStorageComponent { @ViewChild(‘header‘) headerTemplate; @ViewChild(‘footer‘) footerTemplate; constructor(private service: TemplatesService){ } ngAfterViewInit() { this.service.templates.set(‘header‘, this.headerTemplate); this.service.templates.set(‘footer‘, this.footerTemplate); }}
Here, set templates must to present in ‘ngAfterViewInit‘.
Directive:
import {Directive, TemplateRef, ViewContainerRef} from "@angular/core";import {TemplatesService} from "../services/templates.service";@Directive({ selector: ‘[surround]‘})export class SurroundDirective { constructor( private template: TemplateRef<any>, private view: ViewContainerRef, private service: TemplatesService ){} ngAfterViewInit(){ this.view.createEmbeddedView(this.service.templates.get(‘header‘)); this.view.createEmbeddedView(this.template); this.view.createEmbeddedView(this.service.templates.get(‘footer‘)); }}
[Angular Directive] Create a Template Storage Service in Angular 2
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。