Angular Module&#cord ;HTTP'不可用

时间:2015-08-05 19:47:21

标签: angularjs cordova http ionic-framework

我正在运行Ionic并尝试使用cordovaHTTP进行SSL固定。我按照github上的说明操作,但是我收到模块不存在的错误。

我的index.html

<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="cordova.js"></script>

<script src="js/app.js"></script>
<script src="js/controllers.js"></script>
<script src="js/services.js"></script>

我的app.js:

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'cordovaHTTP'])

在services.js中:

angular.module('starter.services', [])

.service('MyService', function(cordovaHTTP) {

    cordovaHTTP.enableSSLPinning(true, function() {
        console.log('successful ssl pin');

        cordovaHTTP.useBasicAuth("user", "pass", function() {
            console.log('successful basic auth!');

            cordovaHTTP.get(url, function(response) {
                console.log(response.status);
            }, function(response) {
                console.error(response.error);
            });
        }, function() {
            console.log('error basic auth');
        });     
    }, function(){
        console.log('error ssl pin');
    });
});

这会导致错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module starter due to:
Error: [$injector:modulerr] Failed to instantiate module cordovaHTTP due to:
Error: [$injector:nomod] Module 'cordovaHTTP' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

我曾经尝试过无数次,但没有骰子。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

实际上我认为您多次初始化模块。角度factories / services是单身。你的代码看起来像这个

angular.module('starter', ['ionic', 'MyService', 'cordovaHTTP']) //setters for a module

请确保您注入正确的服务或工厂名称。您也应该更改服务声明方式,如下所示

angular.module('starter') //Don't use [] it is only getter of above initialized module

.service('MyService', function(cordovaHTTP){ 
      //Code
});

另外请不要忘记最后加载app.js。希望它可以帮助你。

答案 1 :(得分:0)

我从github issues找到了解决方案。

  1. 确保在index.html中的cordova js文件后加载角度js文件。
  2. 这是我的index.html:

    <script src="lib/ionic/js/ionic.bundle.js"></script>
    <script src="lib/jquery/jquery-3.2.1.min.js"></script>
    <script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
    <!-- cordova script (this will be a 404 during development) -->
    <script src="cordova.js"></script>
    
    <script src="js/app.js"></script>
    <script src="js/controllers.js"></script>
    <script src="js/routes.js"></script>
    <script src="js/directives.js"></script>
    <script src="js/services.js"></script>
    
    1. 是否定义了angular
    2.   

      如果定义了角度,则cordova-HTTP将仅实例化cordovaHTTP模块,否则它将回退到window.cordovaHTTP。

      您可以使用此:

      document.addEventListener("deviceready", function () {
        console.log(window.cordovaHTTP);
        console.log(window.CordovaHttpPlugin);  // For some version it's instantiated in this name if angular is not defined.
      }, false);
      
      1. 手动引导您的AngularJS应用,而不是使用ng-app属性。
      2. 代码:

        <script>
          angular.element(document).ready(function() {
              document.addEventListener("deviceready", function () {
                  console.log(window.cordovaHTTP);
                  console.log(window.CordovaHttpPlugin);  // For some version it's instantiated in this name if angular is not defined.
                  angular.bootstrap(document, ['MyAppName']);
              }, false);
          });
        </script>
        
        1. 在控制器或服务中使用时,无需添加$
        2. 就这样使用它:

          angular.module('MyAppName.services', [])
          .service('MyService', ['cordovaHTTP', function(cordovaHTTP){
              // Your codes are here.
          }]);