Angular2中声明的成员变量为何显示undefined?

发布于 2022-09-05 02:20:42 字数 4191 浏览 20 评论 0

在用angular和ionic2 做个添加备忘事件demo,结果页面报错,

AlertCmp.html:1 ERROR TypeError: Cannot read property 'push' of undefined
    at Object.handler (check-list.ts:40)
    at AlertCmp.btnClick (alert-component.js:184)
    at Object.eval [as handleEvent] (AlertCmp.html:1)
    at handleEvent (core.es5.js:11914)
    at callWithDebugContext (core.es5.js:13206)
    at Object.debugHandleEvent [as handleEvent] (core.es5.js:12794)
    at dispatchEvent (core.es5.js:8814)
    at core.es5.js:9406
    at HTMLButtonElement.<anonymous> (platform-browser.es5.js:2687)
    at t.invokeTask (polyfills.js:3)

百思不得其解,望解答。代码:

import { Component } from '@angular/core';
import {AlertController, IonicPage, NavController, NavParams} from 'ionic-angular';
import {CheckListModel} from "../../models/check-list-model";

@Component({
  selector: 'page-check-list',
  templateUrl: 'check-list.html',
})
export class CheckListPage {
      checklists:CheckListModel[];
      constructor(public navCtrl: NavController, public navParams: NavParams,public alertCtrl: AlertController) {
      }

      ionViewDidLoad() {
        console.log('ionViewDidLoad CheckListPage');
      }
      save(){};
      addChecklist(){
        let prompt= this.alertCtrl.create({
          title:'添加新的事项',
          message:'在这里你可以添加新的待办事项',
          inputs:[
            {name:'name'}
          ],
          buttons:[
            {
              text:'取消'
            },
            {
              text:'保存',
              handler: data => {
               let newChecklist= new CheckListModel(data.name,[]);
               this.checklists.push(newChecklist);
               newChecklist.checklistObservable.subscribe(res=>{this.save()});
                this.save();
              }
            }
          ]
        });

        prompt.present();
      };
      renameChecklist(checklist){
        let prompt= this.alertCtrl.create({
          title:'修改事项',
          message:'在这里你可以修改你的待办事项',
          inputs:[
            {name:'name'}
          ],
          buttons:[
            {
              text:'取消'
            },
            {
              text:'保存',
              handler: data => {
                let i= this.checklists.indexOf(checklist);
                this.checklists[i].setTitle(data.name);
                this.save();
              }
            }
          ]
        });
        prompt.present();
      };

      removeChecklist(checklist): void{

        let index = this.checklists.indexOf(checklist);

        if(index > -1){
          this.checklists.splice(index, 1);
          this.save();
        }

      };

      viewChecklist(checklist): void {
        this.navCtrl.push(CheckListPage, {
          checklist: checklist
        });
      }



}

运行代码显示push方法未定义,我在addchecklist方法中consolelog了this.checklists显示undefine;
下面附上CheckListModel代码:

import {Observable} from "rxjs/Observable";

export class CheckListModel{
  checklistObservable: any;
  checklistObserver: any;
  constructor(public title: string, public items: any){
    this.checklistObservable=Observable.create(observer=>this.checklistObserver=observer);
  }
      addItem(item){
        this.items.push({
          title: item,
          checked: false
        });
        this.checklistObserver.next(true);
      }

      removeItem(item){
        let i=this.items.indexOf(item);
        if(i>-1){this.items.splice(i,1)}
        this.checklistObserver.next(true);
      }

      renameItem(item,title){
        let i=this.items.indexOf(item);
        if (i>-1){this.items[i].title=title}
        this.checklistObserver.next(true);
      }

      setTitle(title){
        this.title=title;
        this.checklistObserver.next(true);
      }

      toggleItem(item){
        item.checked=!item.checked;
        this.checklistObserver.next(true);
      }
}

求大神帮看下究竟咋回事?
图片描述

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤独患者 2022-09-12 02:20:43

this.items.push()之前先让this.items = []赋个值吧,不然一个underfined当然没有push()的方法

孤独患者 2022-09-12 02:20:43

items类型的any修改成数组应该就可以了吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文