Javascript 如何使一个组件侦听并等待来自另一个组件的数据,而不在Angular 5中发生事件?

Javascript 如何使一个组件侦听并等待来自另一个组件的数据,而不在Angular 5中发生事件?,javascript,angular,components,angular-material,angular5,Javascript,Angular,Components,Angular Material,Angular5,我在使用两个组件(弹出窗口)时遇到问题,在这两个组件中,我必须将数据从chlid组件发送到另一个没有事件来提取此数据的组件(父级)。 从逻辑上讲,我必须找到一种函数,让父母倾听孩子的变化。 更改必须同时出现在两个组件中。 有人能帮忙吗?是的,您可以使用共享行为子对象来推送值,两个组件都必须订阅才能获得此更改是的,您可以使用共享行为子对象推送值,两个组件都必须订阅才能获得此更改答案在您的问题中。您需要一个输出属性,它是JS事件的角度泛化 在子组件中: class ChildComponent {

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

是的,您可以使用共享行为子对象来推送值,两个组件都必须订阅才能获得此更改

是的,您可以使用共享行为子对象推送值,两个组件都必须订阅才能获得此更改

答案在您的问题中。您需要一个输出属性,它是JS事件的角度泛化

在子组件中:

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

  whenSomethingHappensInChild() {
    this.dataChanged.emit('something');
  }
}
请帮自己一个忙,读一下这些文件,或者最好是一本书;)

特别是: 对绑定的基础知识有一个完整的概述,这个问题就是其中之一


祝你今天愉快。

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

在子组件中:

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

  whenSomethingHappensInChild() {
    this.dataChanged.emit('something');
  }
}
请帮自己一个忙,读一下这些文件,或者最好是一本书;)

特别是: 对绑定的基础知识有一个完整的概述,这个问题就是其中之一


祝您愉快。

问题已解决:我使用@Host()标记获取父组件的当前实例,并访问更改其属性的方法

这是你应该做的

第一: 您应该在子组件中删除父组件

parent:ParentComponent;
第二: 您应该将当前父实例传递给构造函数中的新声明

constructor(@Host() currentParent:ParentComponent){
this.parent=currentParent
 }
第三: 现在尝试访问父组件中的方法和属性

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

我希望您发现这个问题得到了解决:我使用@Host()标记获取父组件的当前实例,并访问更改其属性的方法

这是你应该做的

第一: 您应该在子组件中删除父组件

parent:ParentComponent;
第二: 您应该将当前父实例传递给构造函数中的新声明

constructor(@Host() currentParent:ParentComponent){
this.parent=currentParent
 }
第三: 现在尝试访问父组件中的方法和属性

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

我希望这对你有所帮助

没有活动你是什么意思?这正是使用共享服务和订阅组件中的数据的正确方法,这意味着在子组件中所做的更改必须同时显示在父组件中,而无需单击事件通知父组件接收data@CruelEngine我这样做了,但问题仍然存在,因为我没有要获取的事件这些数据来自共享数据库service@petrucci您需要一个setter,在setter中调用
主题的
.next()
,没有事件是什么意思?这正是使用共享服务和订阅组件中的数据的正确方法,这意味着在子组件中所做的更改必须同时显示在父组件中,而无需单击事件通知父组件接收data@CruelEngine我这样做了,但问题仍然存在,因为我没有要获取的事件这些数据来自共享数据库service@petrucci您需要一个setter,在setter中调用
主题的
.next()
,我这样做了,但问题仍然存在,因为我没有从共享服务获取这些数据的事件您不需要该事件,当你订阅一个behaviorSubject时,你会得到最后一个发出的值,这个值可以是初始状态,也可以是最后一个推送状态,据我所知,这非常适合你。我这样做了,但问题仍然存在,因为我没有从共享服务获取这些数据的事件。你不需要该事件,当你订阅一个behaviorSubject时,你会得到最后一个发出的值,这个值可以是初始状态,也可以是最后一个推送状态,据我所知,这对你来说是完美的。不,不,不,不,不,不,不。这样你就把你的孩子和父母绑在一起,有效地限制他们只在另一个里面工作。这在很多方面都是错误的,我不能一一列举。阅读我链接的页面,开始使用适当的结构:父子通信的输入属性和父子通信的输出属性(EventEmitters)。相信我,你以后会感谢我的。不,不,不,不,不,不。这样你就把你的孩子和父母绑在一起,有效地限制他们只在一个孩子和另一个孩子之间工作。这在很多方面都是错误的,我不能一一列举。阅读我链接的页面,开始使用适当的结构:父子通信的输入属性和父子通信的输出属性(EventEmitters)。相信我,你以后会感谢我的。