NgbDatepicker
在初始化之前您无法使用。为了确保它可用,我们有ngAfterViewInit
钩子。所以如果你想做一些初始化,你可以在ngAfterViewInit
. 但是,如果您仍然想从之前调用的某个函数中使用它view initialisation
(假设是构造函数,因为您没有向我们展示您从哪里调用它),您可以使用它setTimeout
作为一种解决方法,但我不建议这样做。例如,请参见下面的组件 -
@Component({
selector: 'my-app',
templateUrl: './app.component.html'
})
export class AppComponent implements AfterViewInit {
@ViewChild('dp') datepicker: NgbDatepicker;
scheduledStartDate: NgbDateStruct = {year: 2222, month: 10, day: 10};
constructor(private calendar: NgbCalendar) {
console.log(this.datepicker? 'NgDatePicker is available': 'NgDatePicker not initialized');
setTimeout(() => {
this.datepicker.navigateTo({year:2090, month: 10});
}, 1000);
}
ngAfterViewInit() {
console.log(this.datepicker? 'NgDatePicker is available': 'NgDatePicker not initialized');
}
}
请检查这个 stackblitz例子,它工作得很好。有app.component.html
两个按钮可以导航到两个不同的年份。
更新:
你也可以startDate
在你的<ngb-datepicker>
-
<div *ngIf="addEditForm">
<ngb-datepicker #dp [(ngModel)]="scheduledStartDate" [startDate]="scheduledStartDate" (navigate)="date = $event.next" *ngIf="addEditForm"></ngb-datepicker>
</div>
然后不断改变scheduledStartDate
而不是使用this.datepicker.navigateTo({})
openAddForm() {
this.addEditForm = true;
this.scheduledStartDate = {year: 5555, month: 10, day: 10};
}
请参阅此 api 文档以了解更多信息。