这是我的组成部分:
import { Component, OnInit, ContentChildren, QueryList } from '@angular/core';
import { IconBoxComponent } from '../icon-box/icon-box.component';
@Component({
selector: 'app-three-icon-box',
templateUrl: './three-icon-box.component.html',
styleUrls: ['./three-icon-box.component.scss']
})
export class ThreeIconBoxComponent implements OnInit {
@ContentChildren(IconBoxComponent) boxes: QueryList<IconBoxComponent>;
constructor() { }
ngOnInit() {
}
ngAfterContentInit() {
console.log(this.boxes);
}
}
它的模板如下所示:
<div class="row justify-content-center">
<div class="col-12 col-md-10">
<div class="row justify-content-center text-center">
<div *ngFor="let box of boxes" class="col-12 col-sm-4 col-lg-3 offset-lg-1 lz-mb-2 lz-mb-sm-0">
{{ box }}
</div>
</div>
</div>
</div>
这就是我渲染它的方式:
<app-three-icon-box>
<app-icon-box icon="#icon-one">content 1</app-icon-box>
<app-icon-box icon="#icon-two">content 2</app-icon-box>
<app-icon-box icon="#icon-three">content 3</app-icon-box>
</app-three-icon-box>
在第二段代码中,我正在尝试渲染<app-icon-box>
,但我无法弄清楚如何。 {{ box }}
只是想知道我要做什么,但我得到[object Object]
。
答案 0 :(得分:3)
你应该使用这种模式
@ContentChildren
注入标记。提示:您可以多次渲染每个模板并send them parameters。
示例:
import { Component, Input, Directive, TemplateRef, ContentChildren, QueryList } from '@angular/core';
@Directive({
selector: '[templateMarker]'
})
export class TemplateMarker {
constructor(public template: TemplateRef<any>) {}
}
@Component({
selector: 'template-owner',
template: `
<div *ngFor="let marker of markers">
<i><ng-template [ngTemplateOutlet]="marker.template"></ng-template></i>
</div>
`,
})
export class TemplateOwner {
@ContentChildren(TemplateMarker) markers: QueryList<TemplateMarker>;
}
@Component({
selector: 'hello',
template: `<template-owner>
<div *templateMarker>first template</div>
<div *templateMarker>second template</div>
</template-owner>`,
})
export class HelloComponent {}
答案 1 :(得分:0)
有点不清楚你需要什么。 但我想使用ng-content就足够了。删除ContentChildren以及ngFor,然后使用
<body>
<script src="external.js"></script>
<script>
db.collection("users").get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
readInData();
});
</script>
在你的模板中。
然后,您必须直接在声明框组件的位置添加类。
<ng-content></ng-content>
要丰富ThreeIconBoxComponent中的投影组件,您需要使用模板和模板插座完全不同的方法。