ngIf - выражение изменилось после того, как оно было проверено. Предыдущее значение: 'ngIf: false'. Текущее значение: 'ngIf: true' - PullRequest
0 голосов
/ 29 августа 2018

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

У меня есть 2 родственных компонента и как показано ниже ...

header.ts

private postValues() {
   this._PartService.PostDataValues(this.search)
       .subscribe(result => {
       })
}

part.ts

this._PartService.getMasterData()
    .subscribe(result => {
    })

В этом случае мне нужно вызвать метод postValues ​​() в getMasterData (), чтобы получить некоторые значения описания, и он не имеет родительских и дочерних связей

1 Ответ

0 голосов
/ 29 августа 2018

Невозможно вызвать метод компонента-брата напрямую, но есть способ вызвать событие компонента-брата, используя import { BehaviorSubject } from 'rxjs';

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

Сначала вы создаете сервис, сервис, который я называю его DataService.ts

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

@Injectable()
export class DataService {

  private triggerEventMsg = new BehaviorSubject(false);
  triggerEvent = this.triggerEventMsg.asObservable();

  constructor() { }

  triggerEvent(val: boolean) {
    this.messageSource.next(message)
  }

}

Теперь один компонент Запускает другой компонент. На данный момент Com1 вызывает событие Com2.

Триггер Com1 DataService triggerEvent с логическим значением pass.

Com1.component.ts

import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";

@Component({
  selector: 'app-com1',
  template: `
    {{message}}
    <button (click)="newMessage()">New Message</button>
  `
})
export class Com1 implements OnInit {

  constructor(private data: DataService) { }

  ngOnInit() {

  }

 com1ClickEvent() {
    this.data.triggerEvent(true);
  }

}

Com2 Наблюдайте эту переменную, когда данные изменяют триггер метода в Компоненте Com2.

Com2.component.ts

import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";

@Component({
  selector: 'app-com2',
  template: `
    <p>Com2</p>
  `
})
export class Com2 implements OnInit {



  constructor(private data: DataService) { }

  ngOnInit() {
    this.data.triggerEventMsg.subscribe(message => {
        // Do What ever you want.

     })
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...