angularjs – 如何在Angular / Ionic服务中使用自定义Cordova插
我正在努力将自定义Cordova插件集成到Ionic应用程序中.我们有第三方创建了一个Cordova插件来与蓝牙设备连接.运行cordova平台ls显示插件已正确安装:
$cordova plugin ls > com.sitename.product 0.0.0 "DeviceProbe" 该插件包含一个probe.js文件,其中包含连接,读取,轮询和其他操作的方法. /plugins/com.sitename.product/www/probe.js var callNative = function(service,action,success,error,args) { if(args === undefined) args = []; cordova.exec(success,service,args); }; var thermProbe = { // Methods here }; module.exports = thermProbe; 为了在我们的控制器中使用插件,我需要创建一个Angular服务包装器,如described here. 我已经创建了一个工厂来处理这个问题. /lib/probe/probe.js (function() { 'use strict'; var serviceId = 'Probe'; angular.module('thermProbe').factory(serviceId,['$q',Probe]); function Probe($q) { var service = { 'connect': connect,'disconnect': disconnect,'getReading': getReading,'getName': getName,'getHigh': getHigh,'getLow': getLow,'pollReading': pollReading,'stopPolling': stopPolling,'isPolling': isPolling }; return service; // Method wrappers function connect() { var q = $q.defer(); if($window.cordova){ cordova.plugins.thermProbe.connect(function (result) { q.resolve(result); },function (err) { q.reject(err); }); } return q.promise; } } })(); 将Probe服务注入控制器工作正常.当我在我的设备上运行它(使用离子运行android)时,我收到以下错误: TypeError: Cannot read property 'connect' of undefined 追溯到包含cordova.plugins.thermProbe.connect()的行. 我也尝试过使用cordova.plugins.probe.connect()但收到同样的错误. 如何从/plugins/com.sitename.product/www/probe.js获取方法在/lib/probe/probe.js中工作? 解决方法
经过多次试验和错误(以及console.loging)后,我能够解决这个问题.
$window对象有一个探测对象,其中包含所有需要的方法.我猜测探测器名称来自Cordova插件配置. plugin.xml中 <js-module src="www/probe.js" name="probe"> <clobbers target="probe" /> </js-module> <platform name="ios"> <config-file target="config.xml" parent="/*"> <feature name="probe"> <param name="ios-package" value="productName"/> </feature> </config-file> ... ... </platform> <platform name="android"> <config-file target="res/xml/config.xml" parent="/*"> <feature name="probe"> <param name="android-package" value="com.sitename.productName"/> <param name="onload" value="true" /> </feature> </config-file> ... ... </platform> 要使用这些方法: function connect() { var q = $q.defer(); if($window.probe){ $window.probe.connect(function (result) { q.resolve(result); },function (err) { q.reject(err); }); } return q.promise; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |