Ionic3导入DAO类并实例化时报错求助
嘿,我来帮你解决这两个Ionic3开发中的问题,咱们一个个来捋清楚:
1. 导入语句的问题
你当前的导入路径和文件名都有错误:
import {DAOContas} from '../../dao/da-contacts';
你的DAO文件实际放在src/dao/dao-accounts.ts,而accounts.ts在src/pages/accounts/目录下,所以正确的导入路径应该是:
import {DAOContas} from '../../dao/dao-accounts';
要注意两点:一是路径层级没问题(../../能从pages/accounts目录往上两级到src根目录,再进入dao文件夹);二是文件名要和实际的dao-accounts.ts完全匹配,你原来写的da-contacts明显是拼写错误,这肯定会导致找不到模块的问题。
2. 实例化DAO时的ReferenceError问题
从你给出的代码和错误信息来看,核心问题是ContasPage类中没有提前声明dao和listcontas这两个属性。在Angular/Ionic的组件类中,如果你要在构造函数里用this.xxx赋值,必须先在类的顶部定义这些属性,否则运行时会触发未定义的错误(虽然错误提示写的是value,但大概率是因为属性未声明导致的异常,也有可能是模板里引用了未定义的变量)。
先修改ContasPage.ts,提前声明类属性:
import { Component } from '@angular/core'; import { NavController, NavParams } from 'ionic-angular'; import { DAOContas } from '../../dao/dao-accounts'; @Component({ selector: 'page-list', templateUrl: 'contas.html' }) export class ContasPage { // 先声明类需要用到的属性 private dao: DAOContas; public listcontas: Array<any>; constructor(public navCtrl: NavController, public navParams: NavParams) { this.dao = new DAOContas(); this.listcontas = this.dao.getList(); } }
另外,别忘了检查你的contas.html模板!如果模板里用到了类似value的变量但没在组件类中定义,也会触发这个错误。比如如果模板里写了*ngFor="let item of value",那得改成*ngFor="let item of listcontas",确保模板引用的变量和组件类中声明的一致。
最后给你个小建议:在Ionic/Angular开发中,最好用依赖注入来实例化DAO或服务类,而不是直接用new关键字。这样更符合框架的最佳实践,也方便后续的测试和维护。具体做法是:
- 给
DAOContas类添加@Injectable()装饰器:
import { Injectable } from '@angular/core'; @Injectable() export class DAOContas { private list: Array<any>; constructor() { this.list = []; } getList() { this.list = [ {descricao:"Alimentação"}, {descricao:"Lazer"}, {descricao:"Transporte"} ]; return this.list; } }
- 在
app.module.ts的providers数组中注册这个类,或者在ContasPage的@Component装饰器里添加providers: [DAOContas]; - 然后在
ContasPage的构造函数中直接注入:
constructor( public navCtrl: NavController, public navParams: NavParams, private dao: DAOContas // 直接注入,不用手动new了 ) { this.listcontas = this.dao.getList(); }
内容的提问来源于stack exchange,提问作者Bruno Aparecido da Silva

