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