angular ng-template 灵活运用

用处

可以随意调整组件显示的位置,个人觉得在嵌套组件中最方便

举例

app.component.ts

import { Component, ViewChild, TemplateRef,ViewContainerRef } from '@angular/core';
@Component({
  selector: 'app-root',
  styleUrls: ['./app.component.css'],
  template: `
    <div>
      <app-parent>
        <app-child></app-child>
      </app-parent>
    </div>
  `
})
export class AppComponent {
}

parent.component.ts

import { Component, OnInit, TemplateRef } from '@angular/core';
interface Ichild extends Component{
  content: TemplateRef<void>
}
@Component({
  selector: 'app-parent',
  styleUrls: ['./parent.component.css'],
  template: `
    <div>
      <div *ngIf="position==true">
        <ng-template [ngTemplateOutlet]="myChild.content"></ng-template>
      </div>
      <div><button (click)="change()">btn</button></div>
      <div *ngIf="position==false">
        <ng-template [ngTemplateOutlet]="myChild.content"></ng-template>
      </div>
    </div>
  `
})
export class ParentComponent {
  myChild: Ichild;
  position: boolean = true;
  addChild(child: Ichild) {
    this.myChild = child;
  }
  change() {
    this.position = !this.position;
  }
}

child.component.ts

import { Component, OnInit, ViewChild, TemplateRef } from '@angular/core';
import { ParentComponent } from '../parent/parent.component';
@Component({
  selector: 'app-child',
  styleUrls: ['./child.component.css'],
  template: `
  <ng-template>
    <div>
      child component works!
    </div>  
  </ng-template>
  `
})
export class ChildComponent implements OnInit {
  @ViewChild(TemplateRef) content: TemplateRef<void>;
  constructor(public prt: ParentComponent) { }
  ngOnInit() {
    this.prt.addChild(this);
  }

}

效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值