我有两项服务。 login.service.ts
和environment-specific.service.ts
。
在login.service.ts
中,我需要从environment-specific.service.ts
初始化一个Json对象,该对象传递了几个链接。
用例是如何在没有ngOnInit(){}
的情况下在servcie中工作,因为根据Angular2 Lifecycle Hook,ngOnInit()
不能在servcie中使用。
在这里,我找到了必须在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调用的网址。 e.g:
...
var obsRequest = this.http.post( this.link1, serializedForm, this.options )
...
错误很明确:link1 is undefined
有任何建议或提示吗?
答案 0 :(得分:2)
您可以将服务中的ngOnInit
中的逻辑移动到服务的构造函数中。但即便如此,link1
属性可能不会立即设置,因此您可能希望为其提供默认值。
但这对我来说似乎是反模式。您可以使用Angular CLI默认设置的本机Angular 2环境。
它有开发/生产变体,您可以根据需要在那里设置您的值,并将其导入您的服务中。根据你ng build
的方式(如果你传递-prod
标志),将使用不同的env变量。
答案 1 :(得分:0)
在使用服务之前,您可以先通过应用初始化来初始化服务。
可以使用APP_INITIALIZER完成,请参见: