在cordova相机插件的success方法中调用angluar2方法

Posted

技术标签:

【中文标题】在cordova相机插件的success方法中调用angluar2方法【英文标题】:call angluar2 method within the success method of the cordova camera plugin 【发布时间】:2018-01-22 06:55:59 【问题描述】:

我已经成功地在我的 angular2 项目中集成了一个 cordova 插件。 我调用了成功调用本机相机的“takePicture”方法。

public takePicture() 
    const srcType = navigator.camera.PictureSourceType.CAMERA;
    const options = this.setOptions(srcType);
    navigator.camera.getPicture(this.onSuccess, this.onFail,options);
  

  public onSuccess(imageData) 
    this.capture('data:image/jpeg;base64,' + imageData); <-- this doesn't work here I guess

  

  public onFail(message) 
    alert('Failed because: ' + message);
    console.log(message);
  
.....

问题是当我拍照并调用 onSuccess 函数时,当我调用 this.capture(....) 时它会失败,并出现以下错误:

core.es5.js:1084 ERROR TypeError: Cannot read property 'capture' of 空

这意味着 Angular 不知道 this.capture(..) 方法。 有谁知道如何解决这个问题?

【问题讨论】:

无法读取 null 的属性“捕获”。我认为您需要先检查是否有任何数据弹出 我检查 imageData 是否已填充。 如果我调试我发现这是 null 在方法中。在编译时我没有错误 【参考方案1】:

在将实例方法作为回调传递时,您会丢失对象上下文,因此 this 的计算结果为 null

您可以通过将方法调用包装在一个函数中来轻松修复它:

navigator.camera.getPicture(
    (data) => this.onSuccess(data),
    (message) => this.onFail(message),
    options
);

【讨论】:

以上是关于在cordova相机插件的success方法中调用angluar2方法的主要内容,如果未能解决你的问题,请参考以下文章

vue和cordova项目整合打包,并实现vue调用android的相机的demo

Cordova 相机插件

使用 Phonegap/Cordova 相机插件从相机或图库中选择照片

如何使用 Cordova 相机插件拍摄多张照片

Cordova 应用程序在尝试访问相机时崩溃

如何更改 Cordova 相机插件选项