클래스가 해결 ngOnInit()
될 때 왜 호출 되지 Injectable
않습니까?
암호
import {Injectable, OnInit} from 'angular2/core';
import { RestApiService, RestRequest } from './rest-api.service';
@Injectable()
export class MovieDbService implements OnInit {
constructor(private _movieDbRest: RestApiService){
window.console.log('FROM constructor()');
}
ngOnInit() {
window.console.log('FROM ngOnInit()');
}
}
콘솔 출력
FROM constructor()
답변
OnInit()
지시문 및 구성 요소 작업과 같은 라이프 사이클 후크 귀하의 경우 서비스와 같은 다른 유형에서는 작동하지 않습니다. 문서에서 :
구성 요소에는 Angular 자체에서 관리하는 수명주기가 있습니다. Angular는 그것을 생성하고, 렌더링하고, 자식을 생성하고 렌더링하며, 데이터 바인딩 된 속성이 변경 될 때이를 확인하고 DOM에서 제거하기 전에이를 제거합니다.
지시문 및 구성 요소 인스턴스는 Angular가 인스턴스를 생성, 업데이트 및 파괴 할 때 수명주기를 갖습니다.
답변
모든 수명주기 후크에 대해 잘 모르지만 파괴와 관련하여 ngOnDestroy
공급자가 파괴 될 때 실제로 Injectable에서 호출됩니다 (예 : 구성 요소에서 제공하는 Injectable).
로부터 docs :
지시문, 파이프 또는 서비스 가 파괴 될 때 호출되는 수명주기 후크 .
파괴에 관심이있는 사람 이 있다면 이 질문을 확인 하십시오 .
답변
참고 :이 답변은 서비스가 아닌 각도 구성 요소 및 지시문에만 적용됩니다.
ngOnInit
구성 요소에 대해 (및 다른 수명주기 후크) 실행되지 않았을 때도 동일한 문제가 발생 했으며 대부분의 검색으로 인해 여기로 이끌었습니다.
문제는 =>
다음과 같이 화살표 함수 구문 ( )을 사용하고 있다는 것입니다 .
class MyComponent implements OnInit {
// Bad: do not use arrow function
public ngOnInit = () => {
console.log("ngOnInit");
}
}
분명히 Angular 6에서는 작동하지 않습니다. 화살표가 아닌 함수 구문을 사용하면 문제가 해결됩니다.
class MyComponent implements OnInit {
public ngOnInit() {
console.log("ngOnInit");
}
}
답변
내 dataService가 초기화되면 함수를 호출해야했습니다. 대신 생성자 내부에서 호출하여 나를 위해 일했습니다.
답변
import {Injectable, OnInit} from 'angular2/core';
import { RestApiService, RestRequest } from './rest-api.service';
import {Service} from "path/to/service/";
@Injectable()
export class MovieDbService implements OnInit {
userId:number=null;
constructor(private _movieDbRest: RestApiService,
private instanceMyService : Service ){
// do evreything like OnInit just on services
this._movieDbRest.callAnyMethod();
this.userId = this.instanceMyService.getUserId()
}