angular - 访问 Angular @ViewChildren 的子组件参考
问题描述
我正在使用以下 Angular 标记创建多个 ModuleItemComponents:
<div #moduleItems *ngFor="let module of seriesItem.modules; let i = index">
<app-module-item [videoModule]="module" ></app-module-item>
</div>
以下代码位于相应的 .ts 文件中:
@ViewChildren('moduleItems') moduleItems;
我在 ngAfterViewInit 事件中使用代码来尝试获取对每个 ModuleItemComponent 的引用:
ngAfterViewInit() {
let items: [];
items = this.moduleItems.map((m) => m.nativeElement.firstChild);
items.forEach((m) => {
const thisModule = (m as ModuleItemComponent);
thisModule.onSelectionMade.subscribe((result: VideoModule) => {
this.deselectOthers(result);
});
});
}
但是,我在“.subscribe”行出现错误,因为 thisModule 的类型是 app-module-item,而不是 ModuleItemComponent。
我确定我做错了什么 - 只是不知道如何正确地做到这一点。任何帮助表示赞赏。
解决方案
您需要将变量引用放在<app-module-item>
<app-module-item #moduleItems ...>
但是在这种情况下,你可以使用自己的类名而忘记变量引用
@ViewChildren(ModuleItemComponent) moduleItems:QueryList<ModuleItemComponent>
你可以做
ngAfterViewInit()
{
this.moduleItems.forEach(item=>{
..item is a ModuleItemComponent..
..you has access to all his properties..
..e.g. item.onSelectionMade.subscribe(....)
})
}
看到类的名称不在引号之间-我假设类的名称是 ModuleItemComponent,否则更改为类的名称-
推荐阅读
- node.js - 我们可以说 Cloud Firestore 是一个 Web 服务器吗?
- amazon-web-services - 无法将 generate_service_last_accessed_details 与 Boto3 一起使用
- node.js - 在 node.js 中注册时,AWS cognito 给出了序列化异常(结构或地图的开头不是预期的)如何解决这个问题?
- angular - ng.probe 被角元素覆盖
- python-3.x - 动画矩形的颜色
- android - RXJAVA,Kotlin:我需要重复一个动态延迟的任务,比如 2 秒、5 秒、3 秒等
- dart - 如何处理通知抖动
- html - 旧浏览器能识别 HTML5 字符集格式吗?
- ios - didRegisterForRemoteNotificationsWithDeviceToken 没有被调用 Swift 5,Xcode 10.2
- mysql - SQL在聚合函数的循环中获取列名