Получение "Не удается прочитать приглашение свойства undefined" от одного поставщика другому
бдительные-service.ts
public Alert = {
prompt: () => {
return new Promise((resolve, reject) => {
let prompt = this.alertCtrl.create({
title: 'Enter username',
inputs: [
{
name: 'username',
placeholder: 'Username'
},
],
buttons: [
{
text: 'Cancel',
handler: data => {
reject(false);
}
},
{
text: 'Save',
handler: data => {
console.log(data);
resolve(data);
}
}
]
});
prompt.present();
});
}
}
запрос-service.ts
function () {
this.prompt.Alert.prompt().then((res) => {
this.user.username = res;
alert(this.user.username);
}, err => {
this.alertService.Alert.alert('user_cancelled', 'Error');
});
}
Это работает в браузере, когда я использую IONIC Serve, но это не работает на устройстве. Я получаю Не могу прочитать свойство 'prompt' из undefined
1 ответ
Когда вы печатаете это
function () {
this.prompt.Alert.prompt().then((res) => {
this.user.username = res;
alert(this.user.username);
}, err => {
this.alertService.Alert.alert('user_cancelled', 'Error');
});
}
Вы не используете функцию жирной стрелки Typescript. Если вы не хотите использовать жирные стрелки, вы должны использовать Javascript замыкания, чтобы получить правильный контекст для this
ключевое слово
Прямо сейчас this
Ключевое слово ссылается на вашу функцию, а не на ваш объект.
РЕДАКТИРОВАТЬ Пример для замыканий:
В классе машинописи:
x = 'Hey baby';
let fatArrowFunction= () => console.log(this.x); // "Hey baby"
that = this;
let usualFunction = function() {
let x = 'Hey sweetheart';
console.log(x); // "Hey sweethearth"
console.log(this.x); // "Hey sweethearth"
console.log(that.x); // "Hey baby"
}