我使用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()。
有人可以帮我吗?
答案 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;
}
}