angular - Angular:使用 ViewChild 访问孙子和嵌套组件方法
问题描述
有没有办法用 ViewChild 控制孙子和嵌套组件?我需要从顶层访问/运行孙子组件中的公共方法。它似乎对我不起作用。暂时不要使用服务或输入/输出。
它对我有用,仅适用于直接子组件。
资源:
解决方案
即使您说您宁愿不使用服务,这也可能是您的最佳选择。
您可以遵循此解决方案。
使用@ViewChild
,您可以按照本指南操作,孙组件位于祖父组件中。
@Output
否则,您可以使用装饰器创建从孙子到父母,然后从父母到祖父母的“桥梁” 。
子组件公开了一个 EventEmitter 属性,当发生某些事情时它会使用该属性发出事件。父级绑定到该事件属性并对这些事件作出反应。孩子的 EventEmitter 属性是一个输出属性,通常用 @Output 装饰
例子:
祖父母:
<parent (notifyGrandparent)="GrandparentHandle($event)">
</parent>
///ts
GrandparentHandle(event){
// do needed work
}
家长:
<child (handleNotif)="childEvent($event)">
</child>
@Output() notifyGrandparent= new EventEmitter();
childEvent(event) {
this.notifyGrandparent.emit('event')
}
孩子:
@Output() handleNotif = new EventEmitter
onNotify() {
this.handleNotif.emit('notify everyone')
}
您可以按照本指南进行组件交互,并使用完整的 stackblitz 示例。
此外,您可以阅读有关组件交互的此线程
而这个使用的例子@viewChildren
,更有趣......
推荐阅读
- bash - Shell 脚本在特定时间运行以创建文件
- python - 将熊猫数据框转换为火花数据框时出错
- c# - 需要在 StackExchange.Redis 中的 ITransaction.Execute 之后等待任务?
- kubernetes - 服务帐户角色绑定不适用于 API 访问
- sql-server - 将高度复杂的 XML 结构转换为表
- css - 在单个“列”中时的全宽弹性项目
- selenium - java.lang.ClassNotFoundException: org.openqa.selenium.logging.LoggingHandler
- c# - 找不到文件时不运行 C# else 语句
- c++ - C++中的多线程for循环
- vue.js - Vue.js Vuex 如何正确使用 store.watch() 方法?