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

k.v*_*ent 9 angular-services angular

我有两个服务。login.service.tsenvironment-specific.service.ts

login.service.ts我需要初始化一个 Json 对象,environment-specific.service.ts从中传递几个链接。

用例是如何在没有 的情况下使其在 servcie 中工作ngOnInit(){},因为 ngOnInit()根据 Angular2 Lifecycle Hook 不能在 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;
      });
   }
   ...
   ...
}
Run Code Online (Sandbox Code Playgroud)

我想将链接传递给传递给不同http.postAPI 调用的 URL 。例如:

...
var obsRequest = this.http.post( this.link1, serializedForm, this.options )
...
Run Code Online (Sandbox Code Playgroud)

错误很明显: link1 is undefined

请问有什么建议或提示吗?

Lan*_*ara 4

您可以将服务中的逻辑移至ngOnInit服务的构造函数。但即便如此,该link1属性也可能不会立即设置,因此您可能需要为其提供默认值。

但这对我来说似乎是一种反模式。您只需使用默认通过 Angular CLI 设置的本机 Angular 2 环境即可。

它具有开发/生产变体,您可以根据需要在其中设置值,然后将其导入到您的服务中。根据您的方式ng build(如果您-prod是否传递标志),将使用不同的环境变量。