如何在angular2中更新全局变量

vin*_*sad 2 angular

我正在使用 Angular 2。对于全局变量访问,我创建了一个服务并将其注入到我的组件页面中。

我可以在任何页面中访问它,但是当我更新该变量时,更改不会影响在另一个页面中访问它。

这是中的代码GlobaldataService

import { Injectable } from '@angular/core';

@Injectable()
export class GlobaldataService {
    public var1="haii";
}
Run Code Online (Sandbox Code Playgroud)

这是我使用的服务:

constructor(public obj: GlobaldataService){}
Run Code Online (Sandbox Code Playgroud)

在我的一个组件页面中,我更新了变量 this.obj.var1 =" hello";

在另一个页面组件中alert(this.obj.var1);但它显示的是“haii”的旧值,我该如何更新全局变量。

提前致谢。

Geo*_*ngl 6

你想要的是一个信使服务。它保持一个全局变量,并为您的组件提供Observable订阅以及更新和广播新值的方法:

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject ';
import { Observable } from 'rxjs/Observable ';

@Injectable()
export class MessengerService {

    private messageSource: BehaviorSubject<string> = new BehaviorSubject('initialValue'); 
    public message = this.messageSource.asObservable();

    public setMessage(value: string) {
        this.messageSource.next(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的组件中,您只需订阅该值并可以更新它:

import { Subscription } from 'rxjs/BehaviorSubject ';

export class ViewComponent implements OnInit, OnDestroy {

    private messageSubscription: Subscription;

    constructor(private messengerService: MessengerService) { }

    ngOnInit() {
        this.messageSubscription = this.messengerService.message.subscribe(m => {
            // Do something with your value
        });
    }

    ngOnDestroy() {
        this.messageSubscription.unsubscribe();
    }

    setGlobalValue(value: string) {
        // All components that are subscribed to the
        // messenger service receive the update
        this.messengerService.setMessage(value);
    }
}
Run Code Online (Sandbox Code Playgroud)