• [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'));
      }
    }
  • 相关阅读:
    StarUML
    第二周周二日报
    第二周周一日报
    第一周周末报
    第一周周四日报
    第一周第三天日报
    软件开发总结
    构建之法总结
    《构建之法》第六章
    个人日志7
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6291147.html
Copyright © 2020-2023  润新知