Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular ngIf-表达式在检查后已更改。以前的值:';ngIf:false';。当前值:';ngIf:true';_Angular_Typescript_Angular5 - Fatal编程技术网

Angular ngIf-表达式在检查后已更改。以前的值:';ngIf:false';。当前值:';ngIf:true';

Angular ngIf-表达式在检查后已更改。以前的值:';ngIf:false';。当前值:';ngIf:true';,angular,typescript,angular5,Angular,Typescript,Angular5,当方法没有父子关系时,如何从一个组件调用另一个组件 我有两个兄弟组件,如下所示: 标题.ts private postValues() { this._PartService.PostDataValues(this.search) .subscribe(result => { }) } 第1部分 this._PartService.getMasterData() .subscribe(result => { }) 在这种情况下,我

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

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

标题.ts

private postValues() {
   this._PartService.PostDataValues(this.search)
       .subscribe(result => {
       })
}
第1部分

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

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

不可能直接触发同级组件方法,但有一种方法可以使用
导入{BehaviorSubject}来触发同级组件事件来自‘rxjs’

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)
  }

}
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);
  }

}
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.

     })
  }

}
我使用这种方法将数据传递给同级组件,但若您触发事件,它也可以工作。

首先创建服务,我称之为
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)
  }

}
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);
  }

}
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.

     })
  }

}
现在一个组件触发另一个组件,现在,Com1触发Com2事件

带有传递布尔值的Com1触发器DataService triggerEvent

Com1.component.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)
  }

}
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);
  }

}
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.

     })
  }

}

与非父子组件通信。所以我是通过服务来沟通的

服务台

value=false; 
search: EventEmitter < boolean > = new EventEmitter();
toggle() {
   this.value = !this.value;
   this.search.emit(this.value);
}
Home.ts

ngOnInit() {    
   this.service.change.subscribe(value => {
           //some code here
    }
}
我的解决办法是使用

    ngAfterViewChecked(){
      this.cdRef.detectChanges();
    }

在您得到错误的组件中

在部分服务中新建一个header实例,然后调用它的postValues方法。很抱歉,我没有得到您的消息..如何做参考此