【发布时间】:2018-01-18 20:40:43
【问题描述】:
我有两个服务。 login.service.ts 和 environment-specific.service.ts。
在login.service.ts 中,我需要从environment-specific.service.ts 初始化一个Json 对象,该对象传递几个链接。
用例是如何在没有ngOnInit(){} 的情况下使其在服务中工作,因为根据 Angular2 生命周期挂钩,ngOnInit() 不能在服务中使用。
在这里你可以找到我必须在 login.service.ts 内部初始化的部分——当然没有 ngOnInit() 方法:
...
import { EnvSpecific } from '../models/env-specific';
import { ActivatedRoute } from "@angular/router";
@Injectable()
export class LoginService {
link1: string;
link2: string;
link3: string;
constructor(private http: Http, private fbuilder:FormBuilder, private route: ActivatedRoute) { }
ngOnInit(){
this.route.data
.subscribe((data: { envSpecific: EnvSpecific }) => {
this.link1 = data.envSpecific.link1;
this.link2 = data.envSpecific.link2;
this.link3 = data.envSpecific.link3;
});
}
...
...
}
我想将链接传递给传递给不同 http.post API 调用的 URL。例如:
...
var obsRequest = this.http.post( this.link1, serializedForm, this.options )
...
错误很明显:link1 is undefined
有什么建议或提示吗?
【问题讨论】:
-
为什么不在构造函数中?
-
@Robin Dijkhof:我试过了......不幸的是没有用。当我在组件内初始化它时,它工作正常并且我访问例如
link1这意味着代码如果没问题。只是在服务内部它没有。 -
您是否尝试将 link1 设置为类成员定义中的对象?你在哪里
link1: string;,把它改成link1: string = '...';。另外,您是否尝试将this.route.subscribe行移到构造函数中?这样在服务实例化时就会调用它。 -
@Lansana:我不确定我是否理解第一个提示的确切含义。但是关于第二个,是的,我做到了:
constructor(private http: Http, private fbuilder:FormBuilder, private route: ActivatedRoute) { this.route.data .subscribe((data: { envSpecific: EnvSpecific }) => { this.link1 = data.envSpecific.link1; this.link2 = data.envSpecific.link2; this.link3 = data.envSpecific.link3; }); } Error:Cannot read property link1 of undefined` -
您是否只是想从您的环境文件中获取一个值以在您的登录服务中使用?为什么不直接导入环境变量而不是从 URL 中传入呢?