【问题标题】:Is there a method to trigger a function on emit event and not only onChange?有没有一种方法可以在发出事件时触发函数,而不仅仅是 onChange?
【发布时间】:2020-03-25 01:37:50
【问题描述】:

当我在父元素中按下箭头时,我总是发出 true。当发射器从未定义变为真时,子仅在开始时接收更改。是否有一种方法可以在父级发出某些内容时始终调用该函数,即使它的值与 lat time 相同?

父 HTML:

<div (click)="emit()">
<child [changed_slide]= "changed_slide"></child>

父.ts:

emit(){this.changed_slide.emit(true);}

孩子:

ngOnChanges(changes: { [property: string]: SimpleChange }){
    let change: SimpleChange = changes['changed_slide'];
    console.log(change);
    }

所以我希望每次单击父 div 时都会发出“true”(或其他所有内容,我只想发出一些东西以便在子项中执行某些操作),然后会自动触发一个函数孩子。每次我点击父母时,孩子都会做一些事情。 我会很感激任何想法,谢谢!

【问题讨论】:

  • 非常不清楚。发布一个完整的最小示例来重现该问题,准确说明您在做什么,您期望发生什么以及会发生什么。没有任何上下文的 5 行代码是不够的。
  • 谢谢JB,我现在编辑了描述。
  • true is 每次点击时都会发出。但是您提供给孩子的 changed_slide 输入从true 变为true。所以它根本没有改变。所以 ngOnChanges() 不会被调用,因为输入值不会改变。发出一个不同的值。或者使用共享服务并订阅该共享服务从子级公开的可观察对象。
  • 看看here

标签: angular parent-child onchange eventemitter event-binding


【解决方案1】:

就像您将数据从父元素发送到子元素一样,您可以在子元素@Input 中使用集合:

**Child**
    private _changed_slide: boolean;
    @Input() public set changed_slide(value: boolean) {
       this._changed_slide = value;
    }

然后在你的父母中,你可以这样做:

export class ParentComponent {
    private eventSource: Subject<boolean>;
    public event$: Observable<boolean>;
    constructor() {
     this.eventSource = new Subject();
     this.event$ = this.eventSource.asObservable();
    }

    emit() {
      this.eventSource.next(true);
    }
}

HTML:

<div (click)="emit()">
<child [changed_slide]= "event$ | async"></child>

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多