带有BehaviorSubject的Angular SharedService刷新时丢失数据

时间:2018-08-28 08:39:54

标签: rxjs angular5 subject behaviorsubject sharedservices

我创建了sharedService,它可以完美运行,我可以将数据从一个组件共享到另一个组件(这两个组件在不同模块中都是无关的)。

  • 数据传输如下:

AdminDashboard.Component(更新值)===> Conference.component(获取新的更新值)

问题:当我刷新Conference.Component时,我失去了价值

EventService.ts

import { Injectable } from '@angular/core';
import { Observable, BehaviorSubject } from 'rxjs';
import { importExpr } from '@angular/compiler/src/output/output_ast';
import {Events} from '../models/event.model'


@Injectable()
export class EventService {
    private dataSource = new BehaviorSubject(null);
    sendMessage(data) {
        this.dataSource.next(data);
    }

    getMessage(): Observable<any> {
        return this.dataSource.asObservable();
    }
}

dashboard.component(网址/ dashboard)

单击按钮上的msg()方法,该方法更新了BehaviourSubjectvalue。

import { Component, OnInit} from '@angular/core';
import { NgForm } from '@angular/forms';
import { EventService } from '../../shared/sharedServies/eventService.service';

export class AdminDashboardComponent implements OnInit {
 constructor( private testEventService: EventService){ }
  msg() {
    debugger
    this.testEventService.sendMessage('Message from Home Component to App 
    Component!');
  }
}

conference.component(URL /会议) 在这里,我保留消息中的值并绑定到ui。

import { Component, OnInit } from '@angular/core';
import { EventService } from'../../shared/sharedServies/eventService.service';
import { Subscription } from 'rxjs/Subscription';

export class ViewconferenceComponent implements OnInit {
    message: any;
    constructor(private EventService: EventService) {
        this.subscription = this.EventService.getMessage().subscribe(message => {
            console.log(message)
            this.message = message;
        });
    }

}

问题:

  • 当我在/ conference页面上获取数据时,此时刷新 服务持有的价值丢失了,我不知道会发生什么。

  • 我还需要将json添加到sharedService,它将如何实现?

1 个答案:

答案 0 :(得分:0)

这是预期的,因为当您“切换”组件时,它们会被破坏。您可以通过向服务中添加状态变量来快速解决此问题。

就个人而言,我建议您使用ngRx https://github.com/ngrx/platform之类的状态库