angular - 有什么办法可以做某事,以便 ContentChildren 可以找到父级内部的组件 ?
问题描述
我有一些来自第三方库的组件,在使用下一种方式时可以正常工作:
<lib>
<lib-inner [text]="'111'"></lib-inner>
<lib-inner [text]="'222'"></lib-inner>
</lib>
'lib' 和 'lib-inner' 组件代码的简化模仿:
@Component({
selector: "lib",
template: `
<ng-container *ngFor="let c of allInner;">
<button>{{ c.text }}</button>
</ng-container>
`
})
export class LibComponent {
@ContentChildren(LibInnerComponent) allInner: QueryList<LibInnerComponent>;
}
@Component({
selector: "lib-inner",
template: ``
})
export class LibInnerComponent {
@Input() text: string;
}
我想创建包装组件:
<wrapper-for-lib>
<lib-inner [text]="'aaa'"></lib-inner>
<lib-inner [text]="'bbb'"></lib-inner>
</wrapper-for-lib>
@Component({
selector: "wrapper-for-lib",
template: `
<lib>
<ng-content></ng-content>
<lib-inner [text]="'default'"></lib-inner>
</lib>
`
})
export class WrapperForLibComponent {}
当我们使用这个“wrapper-for-lib”组件时,我们只看到“默认”按钮,但看不到按钮“aaa”和“bbb”。
'lib' 组件的 ContentChildren() 找不到 ng-content 中的 'lib-inner' 组件,
有没有办法解决这个问题?
请注意,我无法更改“lib”和“lib-inner”的代码,因为它们模仿了真实第三方库组件的大小写,我无法更改。
解决方案
我认为问题是 lib-inner 呈现为空。尝试渲染一些内容,并将 ng-content 添加到 lib 组件:
lib-inner.component.ts
import { Component, Input } from "@angular/core";
@Component({
selector: "lib-inner",
template: `<button>{{text }}</button>`
})
export class LibInnerComponent {
@Input() text: string;
}
lib.component.ts
import { Component} from "@angular/core";
@Component({
selector: "lib",
template: `<ng-content></ng-content>`
})
export class LibComponent {
}
包装器为 lib.component.ts
import { Component } from "@angular/core";
@Component({
selector: "wrapper-for-lib",
template: `
<lib>
<ng-content></ng-content>
<lib-inner [text]="'default'"></lib-inner>
</lib>
`
})
export class WrapperForLibComponent {}
推荐阅读
- android - 添加新项目后,底部导航视图使应用程序崩溃
- c# - RSACryptoServiceProvider 与 RSACng
- python - 降低运行时间复杂度!!!减少 Python 中的嵌套循环
- python - IntelliJ 分析 Django 应用程序
- python - 时间序列图的问题 - Twitter 分析
- c - 可以创建堆栈区域的克隆吗?
- r - 如何填充与另一列相关的列中的缺失值?
- javascript - 在画布上抚摸文本
- linux - 每次尝试构建 Docker Ubuntu 16:04 映像时出现错误请求 (400) 消息
- typescript - 采用任何类型但不清除参数的形状信息的函数