获取"无法读取未定义的属性提示"从一个提供商到另一个

时间:2017-12-14 09:28:32

标签: angular typescript ionic2 ionic3 ionic2-providers

警报-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时,它会在浏览器中运行,但它不能在设备上运行。无法读取属性'提示'未定义的

1 个答案:

答案 0 :(得分:0)

键入

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"
}