离子导入模块

时间:2018-03-19 16:39:51

标签: javascript angular typescript ionic-framework

我有离子,角度,打字稿的问题,我迷路了一点......

我想在我的文件中调用外部函数,但是我收到错误:" Uncaught(在promise中):TypeError:undefined不是对象(评估' this.alertCtrl。创建')弹出"

这是我的主要文件:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

import { params } from '../../modules/params';

@Component({
  selector: 'page-app',
  templateUrl: 'app.html'
})
export class AppPage {

  params = new params();

  constructor(public navCtrl: NavController) {
    this.params.popup("Hello", "test");
  }

}

以及包含该功能的页面:

import { AlertController } from 'ionic-angular';

export class params {
    public alertCtrl: AlertController;
    constructor(){

    }

    popup(title, text){
        let alert = this.alertCtrl.create({
            title: title,
            subTitle: text,
            buttons: ['OK']
        });
        alert.present();
    }
}

我哪里错了? 非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

要使注入正常工作,必须将其作为构造函数参数传递:

import { AlertController } from 'ionic-angular';

export class params {
    constructor(public alertCtrl: AlertController) {

    }

    popup(title, text){
        let alert = this.alertCtrl.create({
            title: title,
            subTitle: text,
            buttons: ['OK']
        });
        alert.present();
    }
}

您之前所拥有的是alertCtrl类型为AlertController的公共属性的声明,但它从未被初始化,这就是您遇到未定义错误的原因。

答案 1 :(得分:0)

我的朋友。

首先需要在包含要使用的函数的类中添加@Injectable()装饰器。例如:

import { Injectable } from '@angular/core';
import { AlertController } from 'ionic-angular';

@Injectable()
export class params {

    constructor(public alertCtrl: AlertController){

    }

popup(title, text){
    let alert = this.alertCtrl.create({
        title: title,
        subTitle: text,
        buttons: ['OK']
    });
    alert.present();
}
}

然后你只需要在构造函数中注入变量就可以在你的页面中调用它,如下所示:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

import { params } from '../../modules/params';

@Component({
  selector: 'page-app',
  templateUrl: 'app.html'
})
export class AppPage {

  constructor(public navCtrl: NavController, public params: params) {
    this.params.popup("Hello", "test");
  }

}

希望我能帮到你! =)