从 AngularJS 控制器调用 phonegap 插件

Posted

技术标签:

【中文标题】从 AngularJS 控制器调用 phonegap 插件【英文标题】:Calling phonegap plugin from AngularJS controller 【发布时间】:2016-09-02 11:42:44 【问题描述】:

我有一个第 3 方条码扫描器插件。我需要从 angularJS 控制器调用这个插件。我能够成功触发来自 index.js 的 deviceready 事件的扫描仪,该 index.js 带有一个基本的 phonegap 项目。但是,当我尝试从控制器调用插件时,不会触发扫描仪插件。您可以在下面找到我的 index.js 代码:

onDeviceReady: function() 
        app.receivedEvent('deviceready');
        cordova.plugins.pdf417Scanner.scan(function callback(scanningResult)
            //handle success callback
        , function errorHandler(err)
           //handle error
        , arg1, arg2
       );

当我尝试在角度控制器中执行此操作时,类似于:

var myApp = angular.module("scanApp",[]);
myApp.controller("mainCtrl", function()
     document.addEventListener('deviceready', fireScanner, false);
     function fireScanner()
          alert("fireScanner is on");
          cordova.plugins.pdf417Scanner.scan(function callback(scanningResult)
           //handle success callback
        , function errorHandler(err)
           //handle error
        , arg1, arg2
       );
     

现在,在角度控制器中,我将插件调用包装在一个 deviceready 事件侦听器中。提示“fireScanner 已开启”的警报正在触发,但条码扫描器插件未触发。我确定我错过了一些简单的东西,但我无法弄清楚是什么。任何帮助将不胜感激!

【问题讨论】:

在 Angular 中,您可以使用 $rootScope.$on('deviceready', function()...通过在匿名函数中添加函数调用。 【参考方案1】:

我发现了问题所在!这是我传递给插件的参数!在 index.js 中,我在 onDeviceReady 函数下创建了 arg1 和 arg2 并且它没有使自己在 onDeviceReady 函数之外可用。我没有在控制器中创建 arg1 和 arg2,它在控制器中根本不可用,因此插件没有被触发。我必须在控制器中定义 arg1 和 arg2 才能使其工作。

【讨论】:

以上是关于从 AngularJS 控制器调用 phonegap 插件的主要内容,如果未能解决你的问题,请参考以下文章

从 AngularJS 控制器调用 Android 函数

如何从 AngularJS 控制器正确调用 jQuery

如何从AngularJS中的另一个控制器调用函数? [复制]

从angularjs中的服务调用控制器函数

从 index.html javascript 调用 angularJS 控制器函数

在AngularJs中从控制器调用服务时,从$ get factory方法返回一个值