【问题标题】:Child component not getting value from parent子组件未从父组件获取价值
【发布时间】:2021-08-17 12:30:52
【问题描述】:

在我的应用程序中,我有一个父组件和一些子组件。这里需要实现子父通信。

  1. 点击时 child1Component 需要将一些数据从 child1Component 传递给 child2Component。
  2. 在 child2Component 中显示该数据。

我做了什么:-

  1. 从 child1 向 parent 发送值并尝试将相同的值从 parent 绑定/传递给 child2。

  2. 但我没有得到 child2 的 ngOnInit 中的值,如下所示。需要在 child2 中显示该数据。

  3. 此外,在显示 child2 1 或 2 秒后,到 child2 的导航总是重定向到登录页面。

               Child1:
    
               <div (click)="onClickData(data)"></div>
    
               @Output() getData = new EventEmitter();
    
                onClickData (data:any) {
                this.getData.emit(data);
              }
    
              Child2:
    
              @Input() clickedItem: any = '';
    
              ngOnInit() {
                alert(this.clickedItem)
              }
    
              Parent:
    
              <app-child1
                (getdata)="getDataEvent($event)"
              >
              </app-child1>
    
              <app-child2
               [clickedItem] = "clickedData"
              >
              </app-child2>
    
              clickedData:any;
    
              getDataEvent($event: any) {
                this.clickedData = $event;
                this.router.navigate(['child2'])
              }
    

【问题讨论】:

    标签: angular typescript data-binding


    【解决方案1】:

    ngOnInit 仅在启动组件时起作用。请使用ngOnChanges 生命周期钩子

    孩子2:

          @Input() clickedItem: any = '';
    
          ngOnChanges() {
            alert(this.clickedItem)
          }
    

    【讨论】:

    • 非常感谢您的回复让我试试这个,我还更新了一个关于导航的问题!
    • child 2 是否也在 child2 路由中使用?
    • 我尝试了 ngOnchanges 但该方法没有执行,我看不到警报消息。当它是 ngoninit 时,我可以看到一条空白警报消息!
    • 孩子1和2是用在同一个页面还是不同的页面?
    • this.getData.emit(data); 这里你传递的数据是什么?假设如果 data = 'abc' 并且如果您在每次点击中传递与数据相同的 'abc' ,那么它将不起作用,因为数据没有改变。在每次点击中,您必须传递不同的数据。如果您将对象或数组作为数据传递也将起作用。请试试这个。
    【解决方案2】:

    如果你想在两个兄弟组件之间传输数据,你最好使用服务。 见:https://stackoverflow.com/a/36018798/11952668

    【讨论】:

    • 是的,我知道我们可以使用 service/subject 在兄弟组件之间传递数据。但我想检查这种传递方式是否可行..它曾经对我有用..在我的旧项目中。
    • 请问,这种交流方式是可行的吧?如果我们需要传输少量数据,我们可以这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2019-05-13
    • 2019-08-30
    • 2020-08-11
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多