首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个组件间的排序角6通信服务

两个组件间的排序角6通信服务
EN

Stack Overflow用户
提问于 2018-10-19 13:43:30
回答 2查看 287关注 0票数 0

嗨,伙计们,我在角形6和它的组件中挣扎,我创建了一个服务来交流一个在一个组件中触发的事件,以及当它发生时重新加载其他组件。

服务的代码是:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { Observable, BehaviorSubject} from 'rxjs';

@Injectable()
export class CommunicationService {

private subject = new BehaviorSubject<boolean>(false);

constructor() { }

public change(){
  this.subject.next(true);
}

public getChange(): Observable<boolean>{
  return this.subject.asObservable();
 }

}

然后是可观察的组件代码:

代码语言:javascript
复制
public subscription: Subscription;

constructor(
private _router: Router,
private _communication: CommunicationService
){}

loginUser()
{
  this._router.navigate(['./loginUser']);
  this.subscription= Observable.interval(500).subscribe(x=> 
  {
   this._communication.getChange().subscribe( resp=>{
    if(resp===true){
        this.ngOnInit();
        this.subscription.unsubscribe();
    }
  })
});

  }

以及触发器组件代码:

代码语言:javascript
复制
this._communication.change();

基本上,las组件导入了Communication并调用了方法change(),我正在删除代码,并且它似乎做得很好,但是我总是在订阅的响应中出现错误,即使方法更改被调用,我做错了什么?

更新排序我的第一段代码是对的,问题是在提供者的两个组件中导入服务,而不是在app模块中导入它。艾伯特的作品很好

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-19 13:57:47

在服役中

代码语言:javascript
复制
  private subject= new BehaviorSubject(false);
  curretSubject = this.subject.asObservable();

  constructor() { }

  public changeSubject(fl: boolean) {
    this.subject.next(fl)
   }

构成部分:

代码语言:javascript
复制
 loginUser()
  {
    this._router.navigate(['./loginUser']);
    this.subscription= Observable.interval(500).subscribe(x=> 
    {
     this._communication.curretSubject.subscribe( resp=>{
      if(resp===true){
          this.ngOnInit();
          this.subscription.unsubscribe();
      }
    })
  });

  }

扳机:

代码语言:javascript
复制
this._communication.changeSubject(true);
票数 0
EN

Stack Overflow用户

发布于 2018-10-19 17:16:51

经过几次修改后,代码如下所示:

服务:

代码语言:javascript
复制
 private subject= new BehaviorSubject(false);
  currentSubject = this.subject.asObservable();

  constructor() { }

  public change(fl: boolean) {
    this.subject.next(fl);
   }

逆变换为0,5的组件监听:

代码语言:javascript
复制
 loginUser()
  {
    this._router.navigate(['./loginUser']);
    this.subscription= Observable.interval(500).subscribe(x => {
     this._communication.currentSubject.subscribe( resp => {
      if(resp===true){
          this.ngOnInit();
          this.subscription.unsubscribe();
      }
    })
  });

}

扳机:

代码语言:javascript
复制
public onSubmit(){
          this._userService.signup(this.userAux, 'true').subscribe(
        resp2 => {
          this.token = resp2.token;
          if (this.token.length <= 0) {
            alert('El token no se ha generado');
          } else {
            localStorage.setItem('token', this.token);
            this._communication.change(true);
            this._router.navigate(['./']);
          }
        },
        err => {
          const errorMessage = <any>err;
          if (errorMessage != null) {
            const body = JSON.parse(err._body);
            this.errorMessage = body.message;
          }
        }
}

响应总是错误的,执行流程是第一个loginUser(),每0,5秒继续侦听可观察到的对象,然后组件触发器调用Observable.interval ()之后继续侦听,但值为false。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52893603

复制
相关文章

相似问题

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