Я пишу директиву Angular 5, целью которой является добавление некоторых представлений хоста (созданных из компонента) в viewContainer.
Моя дилемма в том, что я не знаю,Для этой цели я должен использовать директиву атрибута или структурную директиву .Я пробовал оба, и они оба работают, поэтому мне нужно объяснить, какой из них мне следует использовать.
Директива атрибута:
HTML:
<div [myAttrDirective]="param"></div>
Директива:
import {
Directive,
Input,
ViewContainerRef,
ComponentRef,
ComponentFactoryResolver,
} from "@angular/core";
import { MyComponent } from "./my-component";
@Directive({ selector: "[myAttrDirective]" })
export class AttrDirective {
@Input()
public set AttrDirective(attrDirective: any) {
const factory = this.componentFactoryResolver.resolveComponentFactory(
MyComponent,
);
attrDirective.forEach((element, index) => {
const componentRef: ComponentRef<
MyComponent
> = this.viewContainer.createComponent(factory);
const myComponent: MyComponent = componentRef.instance;
myComponent.setInformation({ element });
});
}
constructor(
private viewContainer: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver,
) {}
}
Структурная директива:
HTML:
<div *myStrDirective="params"></div>
Директива:
import {
Directive,
Input,
ViewContainerRef,
ComponentRef,
ComponentFactoryResolver,
} from "@angular/core";
import { MyComponent } from "./my-component";
@Directive({ selector: "[myStrDirective]" })
export class StrDirective {
@Input()
public set StrDirective(strDirective: any) {
const factory = this.componentFactoryResolver.resolveComponentFactory(
MyComponent,
);
strDirective.forEach((element, index) => {
const componentRef: ComponentRef<
MyComponent
> = this.viewContainer.createComponent(factory);
const myComponent: MyComponent = componentRef.instance;
myComponent.setInformation({ element });
});
}
constructor(
private viewContainer: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver,
) {}
}