首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngIf-表达式在检查后已更改。前一个值:'ngIf: false‘。当前值:'ngIf: true‘

ngIf-表达式在检查后已更改。前一个值:'ngIf: false‘。当前值:'ngIf: true‘
EN

Stack Overflow用户
提问于 2018-08-29 13:10:43
回答 3查看 26.3K关注 0票数 3

当一个组件没有父子关系时,如何从一个组件调用方法到另一个组件?

我有两个兄弟组件,如下所示:

header.ts

代码语言:javascript
复制
private postValues() {
   this._PartService.PostDataValues(this.search)
       .subscribe(result => {
       })
}

part.ts

代码语言:javascript
复制
this._PartService.getMasterData()
    .subscribe(result => {
    })

在这种情况下,我需要在getMasterData()中调用postValues()方法来获取一些描述值,并且它没有父子通信。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-29 14:18:50

不能直接触发兄弟组件方法,但有一种方法可以使用import { BehaviorSubject } from 'rxjs';触发兄弟组件事件

我使用这种方法将数据传递给同级组件,但如果触发,它也会起作用。

首先创建服务,我称之为DataService.ts的服务

代码语言:javascript
复制
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。

Com1.component.ts

代码语言:javascript
复制
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

代码语言:javascript
复制
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.

     })
  }

}
票数 2
EN

Stack Overflow用户

发布于 2020-04-30 18:07:11

我的解决方案是使用

代码语言:javascript
复制
    ngAfterViewChecked(){
      this.cdRef.detectChanges();
    }

在您得到错误的组件中

票数 1
EN

Stack Overflow用户

发布于 2019-10-23 23:43:48

与不是父子组件的组件通信。所以我通过服务来传达它

service.ts

代码语言:javascript
复制
value=false; 
search: EventEmitter < boolean > = new EventEmitter();
toggle() {
   this.value = !this.value;
   this.search.emit(this.value);
}

search.ts

代码语言:javascript
复制
submit():void{
  this.service.toggle();
}

Home.ts

代码语言:javascript
复制
ngOnInit() {    
   this.service.change.subscribe(value => {
           //some code here
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52069842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档