无法使用Cordova插件

时间:2014-08-11 12:00:25

标签: angularjs cordova

我有一个AngularJS应用程序,我想将其部署为移动设备的应用程序。我听说过Cordova(及其AngularJS对应ngCordova)。我将使用多个Cordova插件。我尝试的第一个是检测用户是否在线。为此,我通过ngCordova使用以下控制器中的cordova-network-informtion插件:

'use strict';
myApp.controller('MyController', function($scope, $cordovaNetwork) {
    $scope.isOnline = null;
    $scope.init = function() {
        // Detect if the user is on a network
        console.log($cordovaNetwork.isOnline());
        $scope.isOnline = $cordovaNetwork.isOnline();
        console.log($scope.isOnline);
    };
    $scope.init();
});

调用init函数时,我在控制台中看到以下内容:

Object {getNetwork: function, isOnline: function, isOffline: function}
TypeError {stack: (...), message: "Cannot read property 'type' of undefined"}

由于全局错误处理程序,打印出类型错误。无论哪种方式,都是调用$scope.isOnline = $cordovaNetwork.isOnline();的结果。我不明白我做错了什么。

我认为根本原因是我没有以任何方式引用cordova.js。我看到的所有例子都参考了cordova.js。但是,当我查看软件包时,我只看到供应商特定的Cordova实现。例如:

  • cordova.windowsphone.js
  • cordova.android.js
  • cordova.ios.js

从部署角度来看,这是有道理的。但是,我仍在尝试在浏览器中进行开发。出于这个原因,我以为我可以使用ngCordova。我还以为会有一个通用的cordova.js作为抽象。但是,我没有看到一个。有人可以帮我克服这个驼峰吗?我真诚地感激它。

2 个答案:

答案 0 :(得分:4)

您的问题与上一段中提到的一样,是您尝试在浏览器中使用Cordova插件。

这是不可能,因为这里没有适用于您浏览器的phonegap抽象层。

所以我认为你有一些机会:

最可靠的是每次在您的设备上进行部署,然后在那里进行测试。 是的,我知道,如果你尝试了很多不同的想法,这总是需要几秒钟,并不是最好的。

另一种选择可能是在$cordovaNetwork中创建自己的模拟ngCordovaMocks

示例:

angular.module('ngCordovaMocks', [])    
.factory('$cordovaNetwork', [function () {    
  return {    
    getNetwork: function () {
      return "Edge"
    },

    isOnline: function () {
      return true;
    },

    isOffline: function () {
      return false
    }
  }
}]);

在app.js中,您包含ngCordovaMocks而不是ngCordova,并且所有服务都将被模拟(请确保,只有您的模拟服务可用,而不是所有ngCordova功能)。

angular.module('myApp', ['ngCordovaMocks']);

是的,这是很多工作,您必须在部署之前更改它。不要忘记:这只是对当地发展的嘲弄。必须使用ngCordova模块和cordova设备连接在您的设备上进行测试。

另一种选择是使用Ripple Emulator,它在您的浏览器中提供了一些Cordova功能。但我不知道连接是否是受支持的。

但是你必须将cordova.js文件集成到index.html。

我不知道供应商特定文件之间的区别是什么,但您应该下载普通和中性cordova.js并包含它。

答案 1 :(得分:1)

首先,ngCordova不是cordova.js的对应物。 ngCordova是一组扩展,旨在用于Cordova之上。您仍然必须在应用中使用Cordova才能将应用部署到移动设备。

我建议你去看看ionicframework.com。 ngCordova的制造商也建立了Ionic,它将为您提供使用angular.js构建移动应用程序所需的所有工具。