离子4-AlertController:属性“ present”不存在-角度?

时间:2019-01-16 11:39:32

标签: ionic-framework mobile-application ionic-native ionic4

我要在Ionic 4中设置一个新警报-空白类型:角度项目。 这是基本警报,但是我在运行项目时遇到错误。

错误

类型“ Promise”上不存在属性“ present”。您忘了使用“等待”吗?

我创建与文档中相同的代码。链接:https://ionicframework.com/docs/api/components/alert/AlertController/

我的代码:

import { AuthenticationService } from './../../services/authentication.service';
import { Component, OnInit } from '@angular/core';
import { AlertController, LoadingController, NavController } from 
'@ionic/angular';

@Component({
  selector: 'app-register',
  templateUrl: './register.page.html',
  styleUrls: ['./register.page.scss'],
})
export class RegisterPage implements OnInit {
  createSuccess = false;
  registerCredentials = { email: '', password: '' };

 constructor(
   private nav: NavController,
   private auth: AuthenticationService,
   private alertCtrl: AlertController) { }

 ngOnInit() {
 }

 presentAlert() {
    const alert = this.alertCtrl.create({
    message: 'Low battery',
    subHeader: '10% of battery remaining',
    buttons: ['Dismiss']
   });
   alert.present(); <--- error Property 'present' does not exist on type 'Promise<HTMLIonAlertElement>'. Did you forget to use 'await'?
}
public register() {
this.auth.register(this.registerCredentials).subscribe(success => {
  if (success) {
    this.createSuccess = true;
    this.showPopup('Success', 'Account created.');
  } else {
    this.showPopup('Error', 'Problem creating account.');
  }
},
  error => {
    this.showPopup('Error', error);
  });
}

应该运行的showPopup函数。

showPopup(title, text) {
let alert = this.alertCtrl.create({
  message: title,
  subHeader: text,
  buttons: [
    {
      text: 'OK'
    }
  ]
});
alert.present(); <-- the same error
}

4 个答案:

答案 0 :(得分:8)

您使用的文档参考了ionic 3 在使用 Ionic 4 时,需要参考当前的Ionic 4 docsthis

this.alertController.create({...})

返回错误所指定的对象的承诺。

您的代码必须为:

 async presentAlert() {
    const alert = await this.alertCtrl.create({
    message: 'Low battery',
    subHeader: '10% of battery remaining',
    buttons: ['Dismiss']
   });
   await alert.present(); 
}

答案 1 :(得分:1)

我已解决此解决方案..

alert.present() 像这样 (await alert).present()

async presentAlert() {
    let alert = this.alertCtrl.create({
      subHeader: 'Low battery',
      message: 'This is an alert message.',
      buttons: ['Dismiss']
    });
    (await alert).present();
  }

答案 2 :(得分:0)

由于警报控制器的返回方法是promise,因此不能直接使用present方法。您需要做的是“先使用然后使用”,然后调用present方法,如下所示-

presentAlert() {
  const alert = this.alertCtrl.create({
  message: 'Low battery',
  subHeader: '10% of battery remaining',
  buttons: ['Dismiss']}).then(alert=> alert.present());
}

希望这会有所帮助:)。

答案 3 :(得分:0)

您必须使用asyncawait。这是一个代码示例:

 async showAlert () {
  const alert = await this.alertCtrl.create({
    header: 'Alert',
    subHeader: 'Subtitle',
    message: 'This is an alert message.',
    buttons: ['okay']
  });
  await alert.present();
};