为什么更改路线时不保存服务数据?

Why data on service isn't saved when changing routes?

我是 angular 的新手,我尝试构建一个小应用程序。 我有这个服务,它包含一个变量和一个函数:

data.service.ts

data = [];
getData() {
  this.http.get(url).subscribe((res)=>
  this.data.push(res));
};

我还有两条路线:

app.module.ts(此处定义服务)

import { DataService } from './data.service';
// ...
const appRoutes = [
  { path: 'home', component: HomeComponent },
  { path: 'settings', component: SettingsComponent }
]
    
@NgModule({
  // ..
  providers: [DataService],
  // ..
})

当我在 homeComponent 中使用 getData 函数时,它工作正常,响应被添加到数据数组。 但是-这就是问题所在-一旦我导航到第二条路线,服务中的数据就会变回空数组。

我本以为导航时服务没有“重新启动”。

所以,问题是什么?谢谢。

当您移动到不同的路线时,所有本地数据都将被删除并使用默认值进行初始化。所以,如果你想维持 data 在其他页面中使用,你必须将值保存在全局声明的变量中。

为了声明可以在所有页面中使用的全局变量,首先创建一个global.service.ts文件并将该文件导入到所有组件中。在任何需要的地方,您都可以访问这些全局变量 this.global.variableName.

按照此link了解如何创建全球服务。

像这样更改您的代码

创建全局服务后,在您的 app.module.ts 中导入此全局服务,然后在 home.component.ts 中导入它,如

import { GlobalService } from '../global.service';
.
.
.constructor(public global: GlobalService) { }
.
.
getData(){
    this.http.get(url).subscribe((res)=>
    this.global.globalData.push(res);
};

从不同的方向发现并解决了问题。

我使用 <a href="/"> 作为路由的 link,这可能会导致应用程序在每次单击时自行重启。 <a routerlink="/"> 解决问题。