如何在Angular 5中没有事件的情况下使组件监听并等待来自另一个组件的数据?

时间:2018-05-16 09:46:20

标签: javascript angular components angular-material angular5

我在使用两个组件(弹出窗口)时遇到问题,我必须将数据从chlid组件发送到另一个(父)没有事件来提取此数据。 从逻辑上讲,我必须找到一种让父母听取孩子所做的改变的功能。 更改必须在两个组件中同时出现。 有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

是的,您可以使用共享的BehaviorSubject推送值,并且两个组件都必须订阅才能获得此更改

答案 1 :(得分:1)

答案在你的问题中。您需要一个Output属性,它是JS事件的Angular泛化。

在您的子组件中:

class ChildComponent {
  @Input() someProperty: string;
  @Output() dataChanged = new EventEmitter<string>();

  whenSomethingHappensInChild() {
    this.dataChanged.emit('something');
  }
}

在您的父模板中:

...
<app-child [someProperty]="'someValue'" (dataChanged)="doSomething($event)"></app-child>
...

在你父母代码中:

class ParentComponent {
  ...
  doSomething(theValue: string) {
    // TA-DAA! you have the value.
  }
  ...
}

请自己帮个忙,阅读DOCS,或者更好的是一本书;)

特别是: https://angular.io/guide/architecture-components全面概述了此问题所涉及的绑定基础知识。

度过愉快的一天。

答案 2 :(得分:0)

解决问题:我使用@Host()标记来获取Parent组件的当前实例,并访问改变它的属性的方法。

这是你应该做的。

第一: 您应该在子项中确定您的父组件

parent:ParentComponent;

第二: 您应该将当前父实例传递给构造函数

中的新声明
constructor(@Host() currentParent:ParentComponent){
this.parent=currentParent
 }

第三: 现在尝试访问父组件中的方法和属性

changeParentAttribute(){
    this.parent.iAmInTheParent();
    } 

我希望你能找到这个有用的