zoukankan      html  css  js  c++  java
  • [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 TemplateRefs 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'));
      }
    }
  • 相关阅读:
    诸暨集训游记
    P2678 跳石头
    P1577 切绳子
    P1328 生活大爆炸版石头剪刀布
    P1067 多项式输出
    分解因数
    【管理篇】团队组织与架构演进方法论
    【状态机】行为状体机和协议状态机
    【数据库】分库分表
    【OLAP】从数仓到Kappa架构
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6291147.html
Copyright © 2011-2022 走看看