动态更改标签? Angular 2

前端之家收集整理的这篇文章主要介绍了动态更改标签? Angular 2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
无论如何要改变这个:
<div>Some text here</div>

至:

<tr>Some text here</tr>

动态地将标签DIV标签更改为TR标签?基本上替换标签

您可以创建自定义结构指令来执行此操作.

Online demo here

更换-tag.directive.ts

import { Directive,Input,TemplateRef,ViewContainerRef,ElementRef,AfterViewChecked } from '@angular/core';

@Directive({
  selector: '[replaceTag]'
})
export class ReplaceTagDirective implements AfterViewChecked {
  constructor(
    private templateRef: TemplateRef<any>,private vcf: ViewContainerRef
  ) { }
  private _tag: string;
  private _needUpdate: boolean = false;

  @Input('replaceTag')
  set tag(t: string): void {
    this._tag = t;
    this._needUpdate = true;
    this.vcf.clear();
    let template = this.templateRef.elementRef.nativeElement.nextElementSibling;
    if (template) {
      this.templateRef.elementRef.nativeElement.parentNode.removeChild(template);
    }
    this.vcf.createEmbeddedView(this.templateRef);
  }

  ngAfterViewChecked() {
    if (this._needUpdate) {
      this._updateTemplate();
      this._needUpdate = false;
    }
  }

  private _updateTemplate() {
    let template = this.templateRef.elementRef.nativeElement.nextElementSibling;
    if (template) {
      let r = document.createElement(this._tag);
      r.innerHTML = template.innerHTML;
      this.templateRef.elementRef.nativeElement.parentNode.replaceChild(r,template);
    }
  }
}

app.component.ts

import { Component,OnInit } from '@angular/core';

@Component({
  selector: 'app-root',template: `
    App
    <span *replaceTag="tag">
      <strong>content {{ tag }} </strong>
      <em>{{ message }}</em>
    </span>
  `
})
export class AppComponent implements OnInit {
  tag: string = 'div';
  timeOut: number = 2;

  get message(): string {
    return this.timeOut? `<- this tag will change after ${this.timeOut} seconds.` : 'done';
  }

  ngOnInit() {
    setTimeout(() => {
      this.tag = 'h2';
      this.timeOut = 4;
    },2000);

    setTimeout(() => {
      this.tag = 'sub';
      this.timeOut = 0;
    },4000);
  }
}

猜你在找的Angularjs相关文章