Angular2 - 如何在服务中初始化数据?

8 浏览
0 Comments

Angular2 - 如何在服务中初始化数据?

我有两个服务。\"login.service.ts\" 和 \"environment-specific.service.ts\"。\n在 \"login.service.ts\" 中,我需要从 \"environment-specific.service.ts\" 初始化一个 Json 对象,该对象传递了几个链接。\n这个用例是如何在服务中使其正常工作,而不使用 \"ngOnInit(){}\",因为根据 Angular2 生命周期钩子,不能在服务中使用 \"ngOnInit()\"。\n在这里,你可以找到我必须在 \"login.service.ts\" 中初始化的部分 - 当然不包括 \"ngOnInit()\" 方法:\n...\nimport { EnvSpecific } from \'../models/env-specific\';\nimport { ActivatedRoute } from \"@angular/router\";\n@Injectable()\nexport class LoginService {\n link1: string;\n link2: string;\n link3: string;\n constructor(private http: Http, private fbuilder:FormBuilder, private route: ActivatedRoute) { }\n ngOnInit(){\n this.route.data\n .subscribe((data: { envSpecific: EnvSpecific }) => {\n this.link1 = data.envSpecific.link1;\n this.link2 = data.envSpecific.link2;\n this.link3 = data.envSpecific.link3;\n });\n }\n ...\n ...\n}\nand I would like to pass the link(s) to the URL passed to different \"http.post\" API call. e.g:\n...\nvar obsRequest = this.http.post( this.link1, serializedForm, this.options )\n...\nThe Error is clear: \"link1 is undefined\" \nAny suggestion or a hint please?

0
0 Comments

Angular2中如何在服务中初始化数据?

你可以通过应用程序初始化在使用服务之前首先初始化你的服务。可以通过使用APP_INITIALIZER来实现,具体可以参考以下链接:

- [https://devblog.dymel.pl/2017/10/17/angular-preload/](https://devblog.dymel.pl/2017/10/17/angular-preload/)

- [Angular: How to correctly implement APP_INITIALIZER](https://stackoverflow.com/questions/49707830)

通过使用APP_INITIALIZER,你可以在应用程序加载时调用一个函数来初始化你的服务,并确保服务在使用之前已经准备好了数据。这样可以避免在服务中使用未初始化的数据导致错误的情况发生。

0
0 Comments

在Angular2中,有一个问题是如何在服务中初始化数据。一种解决方法是将逻辑代码从服务的ngOnInit方法中移动到构造函数中。但即使这样做,link1属性可能不会立即设置,所以你可能想为其提供一个默认值。

但是这种做法似乎是一个反模式。你可以直接使用Angular 2默认为你设置的原生环境,而无需进行任何设置,只需在服务中导入即可。根据你执行ng build的方式(是否传递了-prod标志),将使用不同的环境变量。

我选择使用Angular2内置的环境选项。使用构造函数的方法无法得到预期的结果。

0