如何检查组件是否有<template></template>的子节点?
How to check if component has a child node of <template></template>?
MyComponent 例如:
<div [my-component]="'text'"></div>
在代码中我有 this.viewContainerRef
这是节点本身 (<div>
)。
但是用户可能希望将其模板添加到myComponent
,所以他会这样做:
<div [my-component]="'text'">
<template>
...
</template>
</div>
我的问题是如何在代码中检查是否有 <template>
节点和 use/read 它的 innerHTML?
您可以使用 ContentChild(TemplateRef),然后在定义模板并且只是 html 时进行渲染。这是一个例子。这是为了 Angular 2。为了 Angular 4 '*ngIf;else Block' 可以使用。
@Component({
selector: '[my-component]',
template: `
my-component with input {{v}}
<ng-container *ngIf="tpl">
Template block:
<ng-container [ngTemplateOutlet]="tpl"></ng-container>
</ng-container>
<ng-container *ngIf="!tpl">
No Template block: <ng-content></ng-content>
</ng-container>
`
})
export class MyComponent {
@Input('my-component') v : string;
@ContentChild(TemplateRef) public tpl: TemplateRef;
}
@Component({
selector: 'my-app',
template: `
<div>
<div [my-component]="'text'">
<template><pre>hi there</pre></template>
</div>
<hr>
<div [my-component]="'text1'">
aaa
</div>
</div>
`,
})
export class App {
constructor() {
}
}
MyComponent 例如:
<div [my-component]="'text'"></div>
在代码中我有 this.viewContainerRef
这是节点本身 (<div>
)。
但是用户可能希望将其模板添加到myComponent
,所以他会这样做:
<div [my-component]="'text'">
<template>
...
</template>
</div>
我的问题是如何在代码中检查是否有 <template>
节点和 use/read 它的 innerHTML?
您可以使用 ContentChild(TemplateRef),然后在定义模板并且只是 html 时进行渲染。这是一个例子。这是为了 Angular 2。为了 Angular 4 '*ngIf;else Block' 可以使用。
@Component({
selector: '[my-component]',
template: `
my-component with input {{v}}
<ng-container *ngIf="tpl">
Template block:
<ng-container [ngTemplateOutlet]="tpl"></ng-container>
</ng-container>
<ng-container *ngIf="!tpl">
No Template block: <ng-content></ng-content>
</ng-container>
`
})
export class MyComponent {
@Input('my-component') v : string;
@ContentChild(TemplateRef) public tpl: TemplateRef;
}
@Component({
selector: 'my-app',
template: `
<div>
<div [my-component]="'text'">
<template><pre>hi there</pre></template>
</div>
<hr>
<div [my-component]="'text1'">
aaa
</div>
</div>
`,
})
export class App {
constructor() {
}
}