ПоведениеСубъект между компонентами при изменении маршрута - PullRequest
0 голосов
/ 28 декабря 2018

Мое наблюдаемое не запускается при изменении маршрута.

У меня есть поведение Subject в моем сервисе.

import { Injectable } from '@angular/core';
import { Observable, BehaviorSubject } from 'rxjs';
import { map } from 'rxjs/operators';
import { Rooms } from '../../models/Rooms';
import { UsersService } from '../users/users.service';

@Injectable()
export class RoomsService {
    roomsModel: Rooms
    private _roomsSubject: BehaviorSubject<Rooms> 
    rooms$: Observable<Rooms>

    constructor(private usersService: UsersService ) {
        this._roomsSubject = new BehaviorSubject<Rooms>(this.roomsModel)
        this.rooms$        = this._roomsSubject.asObservable()
    }
}

Когда я подписываюсь на него на компонентах (компонент ожидания), подписказапущен, и у меня есть объект.

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs';
import { UsersService } from 'src/app/services/users/users.service';
import { RoomsService } from 'src/app/services/rooms/rooms.service';
import { Rooms } from 'src/app/models/Rooms';
import { Users } from 'src/app/models/Users';

@Component({
  selector: 'app-waiting',
  templateUrl: './waiting.component.html',
  styleUrls: ['./waiting.component.scss']
})
export class WaitingComponent implements OnInit {

  isHost: boolean
  room: Rooms
  users: Users[]

  constructor(private route: ActivatedRoute, private userService: UsersService, private roomsService: RoomsService) { }

  ngOnInit() {
    this.isHost = (this.route.snapshot.params['host'] == "true")?true:false

    if(this.isHost){
      this.roomsService.createRoom()
    }

    this.roomsService.rooms$.subscribe(room => {
      console.log(room) 
      this.room = room; 
    })    
  }


}

, но из другого компонента (компонента соединения) я перенаправлен на этот компонент, подписка на это наблюдаемое не сработала.

Мой источникздесь: https://plnkr.co/edit/q2x9z9vPe5ZFyKcb1XUo

1 Ответ

0 голосов
/ 28 декабря 2018

Ваш plunkr не работает, но я вижу код.Вам необходимо удалить providers: [ RoomsService ] из декларации AppComponent.Это вызывает несколько экземпляров RoomsService.Другим способом было бы удалить его из NgModule.providers и добавить:

@Injectable({
    providedIn: 'root'
})
export class RoomsService {}

Кроме того, вы переназначаете свойство this.rooms$ в getRoom с return this.rooms$ = this.roomsCollection.Это, вероятно, не то, что вы хотите

...