Angular2 - как инициализировать данные внутри сервиса?
У меня есть две услуги. login.service.ts
и environment-specific.service.ts
.
В login.service.ts
мне нужно инициализировать объект Json из environment-specific.service.ts
, который передает пару ссылок.
Пример использования - как заставить это работать в servcie без ngOnInit(){}
, потому что ngOnInit()
не может использоваться в servcie согласно Angular2 Lifecycle Hook.
Здесь вы найдете часть, которую я должен инициализировать внутри в 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;
});
}
...
...
}
И я хотел бы передать ссылку(ы) на URL, переданный другой вызов API http.post
. например:
...
var obsRequest = this.http.post( this.link1, serializedForm, this.options )
...
Ошибка очевидна: link1 is undefined
Какие-нибудь предложения или намеки, пожалуйста?
1 ответ:
Вы можете переместить свою логику в
ngOnInit
в вашем сервисе в конструктор сервиса. Но даже в этом случае свойствоlink1
может быть установлено не сразу, поэтому вы можете указать для него значение по умолчанию., но это похоже на антипаттерн для меня. Вы можете просто использовать собственную среду Angular 2, которая настроена для вас по умолчанию с помощью Angular CLI.
Он имеет оба варианта разработки / производства, и вы можете установить свои значения там, как вы хотите, и просто импортировать его в свой обслуживание. В зависимости от того, как вы делаете
ng build
(Если вы передаете флаг-prod
или нет), будут использоваться различные переменные env.