如何在Angular 9中从子组件访问父组件

问题

  • 无法通过父子通信使用viewContainerRef。

代码在Angular 8.2中有效

 this.viewContainerRef[ '_data' ].componentView.component.viewContainerRef[ '_view' ].component;

错误

错误TypeError:无法读取未定义的属性'componentView'

公开的Api https://angular.io/api/core/ViewContainerRef

    this.viewContainerRef.get(0) still i got null

我需要从子组件访问父组件。

版本

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.900.7
@angular-devkit/core         9.0.7
@angular-devkit/schematics   9.0.7
@schematics/angular          9.0.7
@schematics/update           0.900.7
rxjs                         6.5.3

无法在Stackblitz中复制问题

https://stackblitz.com/edit/angular-testangular9-communicating-x

问题

ViewContainerRef在Angular 9中不起作用

工作ViewContainerRef

在此处输入图片说明

Angular 9中的ViewConatinerRef不起作用 在此处输入图片说明

任何建议都是最欢迎的。

朱利亚诺巴西

您不应该(绝对)完全访问第三方库的私人成员,以免遇到麻烦。幸运的是,如果我做对了您想做的事情,您可以做一些事情来避免访问这些私人成员。我将展示3个解决方案,其中2个是在此答案末尾引用的stackblitz上实现的。

假设您有这种情况:propertyA由于某种原因,您希望直接在子组件中访问其父组件

父组件:

@Component({
  template: `
    <child></child>
  `
})
export class ParentComponent { propertyA: string; }

情况A:将父母直接注入孩子

@Component({selector: 'child', ...})
export class ChildComp {
  constructor(private _parent: ParentComponent) { this._parent.propertyA = 'some value'; }
}

案例B:让父母通过孩子的 ViewContainerRef

@Component({selector: 'child', ...})
export class ChildComp {
  constructor(private viewContainerRef: ViewContainerRef) {
    const _injector = this.viewContainerRef.parentInjector;
    const _parent: ParentComponent = _injector.get<ParentComponent>(ParentComponent);  
    this._parent.propertyA = 'some value';
  }
}

这是重要的部分:角式进样器的存在完全可以按照您的要求进行,因此,正确的方法是找到如何找到一个进样器来为您进行搜索,而不是试图自己获得该零件的引用。请记住,喷射器以一种层次结构分布,如果喷射器无法解析符号,它将要求其父喷射器尝试递归地解决它,直到到达根喷射器为止。这导致我们采用第三种方法,直接获取组件的进样器:

案例C:让父母通过孩子的注射器直接注射

@Component({selector: 'child', ...})
export class ChildComp {
  constructor(private _injector: Injector) { 
    const _parent: ParentComponent = this._injector.get<ParentComponent>(ParentComponent);  
    this._parent.propertyA = 'some value';
  }
}

案例B和C起作用的原因是,您的组件以父-子-子关系分布在组件树中,并且在某些时候,它们在声明/导入它们的模块处具有公共的注入器。

我已经修改了您的stackblitz以显示这两种解决方案(案例A用于a组件,案例B用于b组件),

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在反应中访问从子组件到父组件的值

来自分类Dev

如何从子组件在父组件中渲染路线组件

来自分类Dev

Angular2-从子组件访问父组件的变量

来自分类Dev

如何在Angular4中将数据从子组件传递到父组件

来自分类Dev

如何从子组件调用父组件中的事件?

来自分类Dev

如何在父组件中访问子组件的引用

来自分类Dev

如何从子组件更改父组件的状态?

来自分类Dev

如何从子组件更改父组件的变量

来自分类Dev

如何从子组件更改父组件的状态?

来自分类Dev

如何在不通过输入传递子组件的情况下从子组件访问父组件的值?

来自分类Dev

如何使用钩子从子组件中重新渲染父对象?

来自分类Dev

如何从子组件访问alpine.js父组件的属性或方法?

来自分类Dev

React:如何从子组件访问父组件的类名而不将其作为 props 传递?

来自分类Dev

如何从子组件向父组件发送价值?(功能组件)

来自分类Dev

如何访问在父模块中声明的组件

来自分类Dev

如何访问子组件中的父数据

来自分类Dev

如何从子组件访问 Angular 4 中的另一个子组件

来自分类Dev

ReactJS:如何访问父组件中的所有子组件?

来自分类Dev

在Angular 8中将FormArray验证器从子组件传播到父组件

来自分类Dev

将数据从子组件传递到Angular @ViewChild中的父组件,需要2个参数

来自分类Dev

如何在angularjs 1.5中访问父组件

来自分类Dev

如何在反应中访问父组件状态

来自分类Dev

在React中,如何将参数从子组件传递到父组件?

来自分类Dev

如何使用React Hooks从子组件onClick()触发父组件中的事件?

来自分类Dev

如何从子组件获取表单中的数据并将其传递回父组件?

来自分类Dev

如何从子组件更新父变量

来自分类Dev

如何从子组件更改父数据?

来自分类Dev

Angular - 从子组件到父组件的项目内容

来自分类Dev

如何在Angular 9中使用“懒加载”使用子组件的事件属性绑定父组件

Related 相关文章

  1. 1

    如何在反应中访问从子组件到父组件的值

  2. 2

    如何从子组件在父组件中渲染路线组件

  3. 3

    Angular2-从子组件访问父组件的变量

  4. 4

    如何在Angular4中将数据从子组件传递到父组件

  5. 5

    如何从子组件调用父组件中的事件?

  6. 6

    如何在父组件中访问子组件的引用

  7. 7

    如何从子组件更改父组件的状态?

  8. 8

    如何从子组件更改父组件的变量

  9. 9

    如何从子组件更改父组件的状态?

  10. 10

    如何在不通过输入传递子组件的情况下从子组件访问父组件的值?

  11. 11

    如何使用钩子从子组件中重新渲染父对象?

  12. 12

    如何从子组件访问alpine.js父组件的属性或方法?

  13. 13

    React:如何从子组件访问父组件的类名而不将其作为 props 传递?

  14. 14

    如何从子组件向父组件发送价值?(功能组件)

  15. 15

    如何访问在父模块中声明的组件

  16. 16

    如何访问子组件中的父数据

  17. 17

    如何从子组件访问 Angular 4 中的另一个子组件

  18. 18

    ReactJS:如何访问父组件中的所有子组件?

  19. 19

    在Angular 8中将FormArray验证器从子组件传播到父组件

  20. 20

    将数据从子组件传递到Angular @ViewChild中的父组件,需要2个参数

  21. 21

    如何在angularjs 1.5中访问父组件

  22. 22

    如何在反应中访问父组件状态

  23. 23

    在React中,如何将参数从子组件传递到父组件?

  24. 24

    如何使用React Hooks从子组件onClick()触发父组件中的事件?

  25. 25

    如何从子组件获取表单中的数据并将其传递回父组件?

  26. 26

    如何从子组件更新父变量

  27. 27

    如何从子组件更改父数据?

  28. 28

    Angular - 从子组件到父组件的项目内容

  29. 29

    如何在Angular 9中使用“懒加载”使用子组件的事件属性绑定父组件

热门标签

归档