Angular React Vue 比较 – 组件篇之动态组件

应用可能会需要在运行期间加载一些新的组件,这个时候我们就用到了动态组件。本章我们将通过一个动态广告条的示例来介绍三大框架是如何动态添加组件的。

Angular中的动态组件

下面的例子展示了如何构建动态广告条。

指令

在添加组件之前,先要定义一个锚点来告诉 Angular 要把组件插入到什么地方。广告条使用一个名叫 AdDirective 的辅助指令来在模板中标记出有效的插入点。AdDirective 注入了 ViewContainerRef 来获取对容器视图的访问权,这个容器就是那些动态加入的组件的宿主。

ad.directive.ts 文件

import { Directive, ViewContainerRef } from '@angular/core';

@Directive({
  selector: '[adHost]',
})
export class AdDirective {
  constructor(public viewContainerRef: ViewContainerRef) { }
}

加载组件

在下的代码中 <ng-template> 元素就是刚才制作的指令将应用到的地方。通过使用 adHost 指令,Angular 就知道该把组件动态加载到哪里了。

要把广告组件添加到模板中,我们可以调用 ViewContainerRef 的 createComponent()

ad.banner.component.ts 文件

import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { AdDirective } from './ad.directive';
import { AComponent, BComponent, CComponent } from './ads.component';

@Component({
  selector: 'app-ad-banner',
  template: `
    <div class="ad-banner-example">
      <h3>动态广告条</h3>
      <ng-template adHost></ng-template>
    </div>
  `
})
export class AdBanner3Comp
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值