首先运行的ngOnInit和构造函数

时间:2017-03-15 09:17:00

标签: javascript angular

当我在构造函数中调用我的服务时,我得到了未定义。 该服务是在ngOnInit方法中调用的,从Difference between Constructor and ngOnInit我看到构造函数首先运行,但在我的情况下我注意到相反的情况,所以我有点困惑。有更多的解释,谢谢。

constructor(private curveService  :ProgressCurveService, private util : UtilService) {
    this.startPickerOptions = new DatePickerOptions();
    this.endPickerOptions = new DatePickerOptions();
    //this.datePickerOptions.initialDate = new Date(Date.now());
   }

ngOnInit() {
    this.curveService.instance.getCurve(this.startDate.formatted,this.endDate.formatted,this.amplutid).
    then(res => {

        this.lineChartLabels = this.util.dateToShortString(Object.keys(res.progressPlotData))
        this.lineChartData = this.util.objectToIntArray(res.progressPlotData);
    }).catch(res => console.log('error if date selecting ...'));
}

进度曲线服务:

import { progressCurveItf } from './progress-curve/progress-curve-interface';

@Injectable()
export class ProgressCurveService {

    state : string = 'project';
  constructor(private prsCurve : PrsProgressCurveService, private projCurve : ProjProgressCurveService) { }
  get instance():progressCurveItf{

    if(this.state == 'subproject'){
        return this.prsCurve;
    } else {
        return this.projCurve;
    }
  } 

}

2 个答案:

答案 0 :(得分:0)

当你返回一个类型为progressCurveItf的实例时,我认为你返回的实例化存在问题, 检查您是否提供PrsProgressCurveServiceProjProgressCurveService

答案 1 :(得分:0)

要回答您的问题,构造函数将被调用,因为它属于ES6,基本上它具有优先级。其中ngOnInit是由角度小组设计的生命周期挂钩,即使在ngOnChanges生命周期挂钩之后,它也将在构造函数之后被调用。

构造函数-> ngOnChanges-> ngOnInit->后跟其他生命周期挂钩