我要在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
}
答案 0 :(得分:8)
您使用的文档参考了ionic 3
在使用 Ionic 4 时,需要参考当前的Ionic 4 docs和this。
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)
您必须使用async
和await
。这是一个代码示例:
async showAlert () {
const alert = await this.alertCtrl.create({
header: 'Alert',
subHeader: 'Subtitle',
message: 'This is an alert message.',
buttons: ['okay']
});
await alert.present();
};