Angular 将数据服务中的全局数据设置为可从所有组件访问

Angular 将数据服务中的全局数据设置为可从所有组件访问,angular,Angular,我试图在登录数据服务后保存访问令牌。 登录后,我正在auth.service.ts文件中设置accessToken,并尝试在另一个文件中访问此值 数据服务.ts _accessToken: string; getAccessToken(){ return this._accessToken; } setAccessToken(accessToken: string) { this._accessToken = accessToken; } setSession(authRes

我试图在登录数据服务后保存访问令牌。 登录后,我正在
auth.service.ts
文件中设置
accessToken
,并尝试在另一个文件中访问此值

数据服务.ts

_accessToken: string;

getAccessToken(){
    return this._accessToken;
}
setAccessToken(accessToken: string) {
    this._accessToken = accessToken;
}
setSession(authResult) {
    this.dataService.setAccessToken(authResult);
    console.log(this.dataService.getAccessToken()); 
}
ngOnInit() {
    console.log(this.dataService.getAccessToken());
}
auth.service.ts

_accessToken: string;

getAccessToken(){
    return this._accessToken;
}
setAccessToken(accessToken: string) {
    this._accessToken = accessToken;
}
setSession(authResult) {
    this.dataService.setAccessToken(authResult);
    console.log(this.dataService.getAccessToken()); 
}
ngOnInit() {
    console.log(this.dataService.getAccessToken());
}
当我在
auth.service
中打印
this.dataService.getAccessToken()
时,我得到了正确的访问令牌

现在我尝试在另一个组件中访问它,我得到了未定义的

订单.组件.ts

_accessToken: string;

getAccessToken(){
    return this._accessToken;
}
setAccessToken(accessToken: string) {
    this._accessToken = accessToken;
}
setSession(authResult) {
    this.dataService.setAccessToken(authResult);
    console.log(this.dataService.getAccessToken()); 
}
ngOnInit() {
    console.log(this.dataService.getAccessToken());
}
以上结果导致
未定义


我不知道为什么会这样

您的服务装饰程序必须在“root”中提供
,才能访问

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

@Injectable({
  providedIn: 'root'
})
export class YourService {
  // Your service logic goes here
}

注意:~当您在根级别提供服务时,Angular会创建一个共享的服务实例,并将其注入任何请求它的类中。在@Injectable()元数据中注册提供程序还允许Angular通过从未使用的已编译应用程序中删除服务来优化应用程序。

是否为您的
数据。应用程序模块中是否提供了服务?如果是这样的话,它应该是一个在整个应用程序中共享的单个实例,如果它是在组件级别提供的,那么它将是每个组件的一个新实例,您将看到您描述的行为。是的,我已经在app.module.ts的providers数组中添加了条目,还是同样的问题您是在组件级别创建服务的新实例还是使用构造函数注入?