Angular 无法读取属性';推动';未定义的

Angular 无法读取属性';推动';未定义的,angular,nativescript,angular2-forms,angular2-nativescript,Angular,Nativescript,Angular2 Forms,Angular2 Nativescript,我在typescript上使用push方法时遇到问题,请在此详细说明 这是我的预订模式组件代码: guestArray=[1, 2, 3, 4, 5, 6]; guests: number; isDateTime: boolean = false; constructor(private params: ModalDialogParams, private page: Page) { if(params.context === "guest") {

我在typescript上使用push方法时遇到问题,请在此详细说明
这是我的预订模式组件代码:

guestArray=[1, 2, 3, 4, 5, 6];
guests: number;
isDateTime: boolean = false;

constructor(private params: ModalDialogParams,
    private page: Page) {

        if(params.context === "guest") {
            this.isDateTime = false;
        }
        else if(params.context === "date-time") {
            this.isDateTime = true;
        }
}

ngOnInit() {

    if (this.isDateTime) {
        let datePicker: DatePicker = <DatePicker>this.page.getViewById<DatePicker>('datePicker');

        let currentdate: Date = new Date();
        datePicker.year = currentdate.getFullYear();
        datePicker.month = currentdate.getMonth() + 1;
        datePicker.day = currentdate.getDate();
        datePicker.minDate = currentdate;
        datePicker.maxDate = new Date(2045, 4, 12);

        let timePicker: TimePicker = <TimePicker>this.page.getViewById<TimePicker>('timePicker');
        timePicker.hour = currentdate.getHours();
        timePicker.minute = currentdate.getMinutes();
    }
}

public submit() {
    if (this.isDateTime) {
        let datePicker: DatePicker = <DatePicker>this.page.getViewById<DatePicker>('datePicker');
        let selectedDate = datePicker.date;
        let timePicker: TimePicker = <TimePicker>this.page.getViewById<TimePicker>('timePicker');
        let selectedTime = timePicker.time;
        let reserveTime = new Date(selectedDate.getFullYear(),
                                    selectedDate.getMonth(),
                                    selectedDate.getDate(),
                                    selectedTime.getHours(),
                                    selectedTime.getMinutes());
        this.params.closeCallback(reserveTime.toISOString());
    }
    else {
        let picker = <ListPicker> this.page.getViewById<ListPicker>('guestPicker');
        this.params.closeCallback(this.guestArray[picker.selectedIndex])
    }
}
guestArray=[1,2,3,4,5,6];
嘉宾:人数;
isDateTime:布尔值=false;
构造函数(私有参数:ModalDialogParams,
私人网页(第页){
if(params.context==“guest”){
this.isDateTime=false;
}
else if(params.context==“日期时间”){
this.isDateTime=true;
}
}
恩戈尼尼特(){
如果(此.isDateTime){
让datePicker:datePicker=this.page.getViewById('datePicker');
让currentdate:日期=新日期();
datePicker.year=currentdate.getFullYear();
datePicker.month=currentdate.getMonth()+1;
datePicker.day=currentdate.getDate();
datePicker.minDate=当前日期;
datePicker.maxDate=新日期(2045,4,12);
让timePicker:timePicker=this.page.getViewById('timePicker');
timePicker.hour=currentdate.getHours();
timePicker.minute=currentdate.getMinutes();
}
}
公开提交(){
如果(此.isDateTime){
让datePicker:datePicker=this.page.getViewById('datePicker');
让selectedDate=datePicker.date;
让timePicker:timePicker=this.page.getViewById('timePicker');
让selectedTime=timePicker.time;
让reserveTime=新日期(selectedDate.getFullYear(),
selectedDate.getMonth(),
selectedDate.getDate(),
selectedTime.getHours(),
selectedTime.getMinutes());
this.params.closeCallback(reserveTime.toISOString());
}
否则{
让picker=this.page.getViewById('guestPicker');
this.params.closeCallback(this.guestArray[picker.selectedIndex])
}
}
`

提交结果后返回预订组件进行处理,这里是他们的代码

reservation: FormGroup;
formReservation: View;
formResult: View;
docId: string = "reservations";
doc: any;
db:any;

constructor(private changeDetectorRef: ChangeDetectorRef,
    private formBuilder: FormBuilder,
    private modalService: ModalDialogService,
    private vcRef: ViewContainerRef,
    private page: Page,
    private couchbaseService: CouchbaseService) {
    super(changeDetectorRef);

    this.reservation = this.formBuilder.group({
        guests: 3,
        smoking: false,
        dateTime: ['', Validators.required]
    });
    this.doc = this.couchbaseService.getDocument(this.docId);
}
createModalView(args) {

    let options: ModalDialogOptions = {
        viewContainerRef: this.vcRef,
        context: args,
        fullscreen: false
    };

    this.modalService.showModal(ReservationModalComponent, options)
        .then((result: any) => {
            if (args === "guest") {
                this.reservation.patchValue({ guests: result });
            }
            else if (args === "date-time") {
                this.reservation.patchValue({ dateTime: result });
            }
        });

}

ngOnInit() {
    this.formReservation = <View>this.page.getViewById<View>("form_reservation");
    this.formResult = <View>this.page.getViewById<View>("form_result");

    this.formResult.animate({
        opacity: 0,
        scale: { x: 0.5, y: 0.5 },
        duration: 0
    })
}

onSmokingChecked(args) {
    let smokingSwitch = <Switch>args.object;
    if (smokingSwitch.checked) {
        this.reservation.patchValue({ smoking: true });
    }
    else {
        this.reservation.patchValue({ smoking: false });
    }
}

onGuestChange(args) {
    let textField = <TextField>args.object;

    this.reservation.patchValue({ guests: textField.text });
}

onDateTimeChange(args) {
    let textField = <TextField>args.object;

    this.reservation.patchValue({ dateTime: textField.text });
}

onSubmit() {
    console.log(JSON.stringify(this.reservation.value));
    let reservationArr : Array<object>;

   reservationArr.push(this.reservation.value);
   console.log(JSON.stringify(reservationArr));

    this.formReservation.animate({
        opacity: 0,
        scale: { x: 0.5, y: 0.5 },
        duration: 500
    }).then(() => this.formResult.animate({
        opacity: 1,
        scale: { x: 1, y: 1 },
        duration: 500
    }));

    if (this.doc == null) {
        console.log("This is the first reservation");
        this.couchbaseService.createDocument({ "guests": this.reservation.value.guests, "smoking": this.reservation.value.smoking, "dateTime": this.reservation.value.dateTime }, this.docId);
    } else {
        console.log(this.doc.value);
        this.couchbaseService.updateDocument(this.docId, { "guests": this.reservation.value.guests, "smoking": this.reservation.value.smoking, "dateTime": this.reservation.value.dateTime });
    }
}
预约:FormGroup;
形式保留:视图;
formResult:视图;
docId:string=“预订”;
医生:任何;
db:任何;
构造函数(私有changeDetectorRef:changeDetectorRef,
私有formBuilder:formBuilder,
私人modalService:ModalDialogService,
私有vcRef:ViewContainerRef,
私人网页:第页,
私人couchbaseService:couchbaseService){
super(changedethetectorref);
this.reservation=this.formBuilder.group({
嘉宾:3,,
吸烟:错,
日期时间:['',验证器。必需]
});
this.doc=this.couchbaseService.getDocument(this.docId);
}
createModalView(args){
let选项:ModalDialogOptions={
viewContainerRef:this.vcRef,
上下文:args,
全屏显示:错误
};
this.modalService.showmodel(ReservationModalComponent,选项)
。然后((结果:任意)=>{
if(args==“guest”){
this.reservation.patchValue({guests:result});
}
else if(args==“日期时间”){
this.reservation.patchValue({dateTime:result});
}
});
}
恩戈尼尼特(){
this.formReservation=this.page.getViewById(“form_reservation”);
this.formResult=this.page.getViewById(“form_result”);
这个.formResult.animate({
不透明度:0,
比例:{x:0.5,y:0.5},
持续时间:0
})
}
吸烟检查(args){
让smokingSwitch=args.object;
如果(烟雾开关。已检查){
this.reservation.patchValue({smoking:true});
}
否则{
this.reservation.patchValue({smoking:false});
}
}
onGuestChange(args){
设textField=args.object;
this.reservation.patchValue({guests:textField.text});
}
onDateTimeChange(args){
设textField=args.object;
this.reservation.patchValue({dateTime:textField.text});
}
onSubmit(){
log(JSON.stringify(this.reservation.value));
let reservationArr:Array;
reservationArr.push(this.reservation.value);
log(JSON.stringify(reservationArr));
这个.formReservation.animate({
不透明度:0,
比例:{x:0.5,y:0.5},
持续时间:500
}).然后(()=>this.formResult.animate({
不透明度:1,
比例:{x:1,y:1},
持续时间:500
}));
如果(this.doc==null){
log(“这是第一次预订”);
this.couchbaseService.createDocument({“来宾”:this.reservation.value.guests,“冒烟”:this.reservation.value.smoking,“dateTime”:this.reservation.value.dateTime},this.docId);
}否则{
console.log(此.doc.value);
this.couchbaseService.updateDocument(this.docId,{“guests”:this.reservation.value.guests,“smoking”:this.reservation.value.smoking,“dateTime”:this.reservation.value.dateTime});
}
}
这是提交后的日志图像,我已收到数据,但无法将其推入新阵列。你能检查一下并解释一下为什么不起作用吗?多谢各位


您只是声明数组而不是初始化它,它应该是

   let reservationArr : Array<object> = [];
let-reservationArr:Array=[];

您只是声明数组而不是初始化它,它应该是

   let reservationArr : Array<object> = [];
let-reservationArr:Array=[];