Angular 2 - передать логическое "истина" от одного компонента к другому (не братьям и сестрам)

На одном компоненте у меня есть кнопка, которая запускает функцию:

<button (click)="open Popup(); hideButton()"></button>

У меня, скажем так: buttonService что я должен использовать для связи между этими двумя компонентами.

А во втором компоненте (который не родитель-потомок связан с первым компонентом) у меня есть несколько кнопок, как это:

<button class="element1"></button>
<button [class.hiddenClass]="hideButt" class="element2"></button>
<button class="element3"></button>

Второй компонент - это всплывающее окно, которое открывается по нажатию той же кнопки от первого компонента, и в этот момент он также должен вызвать hideButton() функция для передачи логического "true" hideButt и скрыть кнопку на этом втором (всплывающем) компоненте. Как мне это сделать? С подпиской, Observable, EventEmitter?

2 ответа

Решение

Вы можете найти тему rxjs полезной. Это отлично подходит для межкомпонентной связи с сервисом. Добавить недвижимость в свой класс обслуживания,

Public buttonClick = new Subject ()

Затем в компоненте, из которого вы хотите отправить данные, обратиться к сервису и вызвать на нем next ()

This.myservice.buttonClick.next (true)

Тогда вы можете подписаться на свою тему из любого другого компонента

This.myservice.buttonClick.subscribe (data => data)

И всякий раз, когда вы звоните дальше, любые подписки будут получать ваши новые данные от любого компонента.

Кроме того, субъектом поведения является субъект, который будет излучать начальное значение

Надеюсь это поможет!

Я думаю, что вы можете достичь этого, используя eventEmitter, он уведомит ваш второй компонент, как только вы нажмете кнопку, вам просто нужно подписаться на источник событий.

Вариант 1 между компонентами Вы будете делать это в компоненте, который вы хотите вызвать изменения

Импортировать

import { Injectable, EventEmitter } from '@angular/core';

декларировать

 @Output()variableEvent: EventEmitter<any> = new EventEmitter();

Установите значение, которое вы хотите изменить

   public sendChange(){

 this.variableEvent.emit(value);

}

Добавьте это в шаблон компонента, который вы хотите получить значение

 <child (sendChange)="getValue($event)"></child>  

Добавьте эту строку в ваш component.ts

private getValue($event){
//Get the value
}     

Вариант 2 с использованием сервиса

  export class Service {
    public change: EventEmitter<any> = new EventEmitter();

    public setdata(value) {

        this.change.emit(value);
    }
}

Компонент, который устанавливает данные

export class SetDataComponent {

constructor(private service: Service) {}

private setData(){

this.service.setData(value);

}

}

Компонент, который будет получать данные

export class GetDataComponent {

constructor(private service: Service) {}

private getData()
{

this.service.change.subscribe(value => {
               let dataRecieve = value;

            });
}

}

Преимущество генератора событий заключается в том, что как только событие происходит, оно уведомляет все компоненты, на которые подписаны.

Другие вопросы по тегам