Uncaught TypeError:Object(...)不是Cordova插件参考的函数

时间:2019-05-08 23:52:35

标签: cordova ionic-framework cordova-plugins ionic4 ionic-native

我使用Plugman创建了cordova插件,并试图在我的离子应用程序中使用它。但是我收到了Uncaught TypeError:Object(...)不是一个函数...我无法弄清楚这个错误是什么。

进行了一些研究,发现升级离子本机版本可能行得通,但对我而言不行。

我正在尝试为插件创建包装服务:

    import { Injectable } from '@angular/core';
    import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';

    @Plugin({
      pluginName: 'mathcalculator',
      plugin: 'cordova.plugin.mathcalculator',
      pluginRef: 'MathCalculator', 
      repo: 'https://github.com/dkandel/MathCalculator.git', 
      platforms: ['Android']
    })

    @Injectable({
     providedIn: 'root'
    })
    export class MathService extends IonicNativePlugin {

      @Cordova()
      add(args: any): Promise<any> {
       return;
      }
    }

该服务已添加到App模块文件中的提供者。 我的插件文件夹中也有该插件。当我尝试运行该应用程序时,我不断得到Object(...)不是一个函数,并且错误指向服务文件上的@Cordova()。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

我今天也遇到了同样的问题,并且犯了与您相同的错误。

问题是,您直接在Angular服务中使用@Plugin和@Cordova装饰器,而这些装饰器并非打算在这些位置使用。在编写离子化原生Cordova插件包装程序时,我可以找到许多有关该主题的教程,但并不清楚。

我解决问题的方法是克隆ionic-native repo并遵循these instructions来构建插件。生成它还会创建一个ngx目录,其中包含另一个版本的插件,如果您希望该插件使用Observables而非Promises进行操作,则应导入该版本。

构建完成后,将其复制到项目的node_modules / @ ionic-native目录中。然后,可以将其添加到项目中的模块中,然后将其注入服务或组件中,并在使用任何内置本机插件时使用它。

答案 1 :(得分:0)

不确定您是否仍然需要解决方案,但这对我有用。

import { Injectable } from '@angular/core';
import { cordova, IonicNativePlugin } from '@ionic-native/core';


@Injectable()
export class PluginService extends IonicNativePlugin {
  static pluginName = 'mathcalculator';
  static plugin = 'cordova-plugin-mathcalculator';
  static pluginRef = 'MathCalculator';
  static repo = 'https://github.com/GitUser/Cordova-Plugin-Example.git';
  static platforms = ['iOS']

  add(num1, num2): Promise<any> {
    const x = cordova(this, 'add', {}, [{ param1: num1, param2: num2 }])
    return x;
  }

  substract(num1, num2): Promise<any> {
    const x = cordova(this, 'substract', {}, [{ param1: num1, param2: num2 }])
    return x;
  }

}