Есть ли способ вызвать функцию при возникновении события, а не только при изменении?

Когда я нажимаю стрелку в родительском элементе, я всегда испускаю true. Дочерний элемент получает изменение только в начале, когда эмиттер изменяется с неопределенного на истинное. Есть ли способ всегда вызывать функцию, когда родитель испускает что-то, даже если это то же значение, что и в последнее время?

Родительский 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" будет испускаться (или все остальное, я просто хочу, чтобы что-то испускалось, чтобы что-то делать в дочернем элементе), а затем одна функция будет автоматически запускаться в дочернем элементе. Каждый раз, когда я нажимаю на родителя, ребенок что-то делает. Буду признателен за любые идеи, Спасибо!


person Community    schedule 29.11.2019    source источник
comment
Очень неясно. Опубликуйте полный минимальный пример, воспроизводящий проблему, точно расскажите, что вы делаете, что вы ожидаете получить и что происходит вместо этого. 5 строк кода без контекста недостаточно.   -  person JB Nizet    schedule 29.11.2019
comment
Спасибо JB, теперь я отредактировал описание.   -  person    schedule 29.11.2019
comment
true выдается при каждом нажатии. Но ввод change_slide, который вы предоставляете дочернему элементу, меняется с true на true. Так что вообще не меняется. Таким образом, ngOnChanges() не вызывается, так как входное значение не изменяется. Выдать другое значение. Или используйте общую службу и подпишитесь на наблюдаемый объект, предоставляемый этой общей службой от дочернего элемента.   -  person JB Nizet    schedule 29.11.2019
comment
Посмотрите здесь   -  person bhavya_karia    schedule 29.11.2019
comment
также посмотрите этот вопрос stackoverflow.com/questions/44053227/   -  person Belouccio    schedule 29.11.2019


Ответы (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>
person German Quinteros    schedule 29.11.2019