因加载两项服务导致应用程序中断

时间:2018-01-09 09:55:27

标签: angularjs

我现在正在使用两种服务,但只有一种服务取决于加载哪种服务。如果我只加载一个服务,它就可以工作。非此即彼。这些服务也包含在我的app.js

一项服务:

(function() {
  'use strict';

  angular.module('nutricia.services', [])
    .service('LoginService', function($http) {


        var login = function (apiUrl, apiKey, loginID, password) {
         return $http({
             method: "POST",
             url: apiUrl + "?apiKey=" + encodeURIComponent(apiKey) + "&loginID=" + encodeURIComponent(loginID) + "&password=" + encodeURIComponent(password) 
           });
        };

        var logout = function (apiUrl, apiKey, UID) {
          return $http({
              method: "POST",
              url: apiUrl + "?apiKey=" + encodeURIComponent(apiKey) + "&UID=" + encodeURIComponent(UID)
          });
        };

        return {
          login: login,
          logout: logout
        };

    })
})();

其他服务:

(function() {
    'use strict';

    angular.module('nutricia.services', [])
        .service('KwaaltjestestService', function($http, $q) {

            var getKwaaltjes = function (params) {
              var deferred = $q.defer();

               $http({
                     method: 'GET',
                     url: 'https://www.nutriciavoorjou.nl/mvc/allergytest/' + params
                   }).then(function successCallback(response) {
                       deferred.resolve(response.data);
                     }, function errorCallback(response) {
                     });
                   return deferred.promise;
            };

            return {
                getKwaaltjes: getKwaaltjes
            };

        })
})();

一个控制器:

(function () {
    'use strict';

    angular.module('nutricia.login', [])
    .controller('LoginCtrl', function(LoginService) {


    });

})();

其他控制器:

(function () {
    'use strict';

    angular.module('nutricia.kwaaltjestest', [])
    .controller('KwaaltjestestCtrl', function(KwaaltjestestService) {


    })

})();

的index.html:

<script src="components/kwaaltjestest/kwaaltjestest.controller.js"></script>
<script src="components/login/login.controller.js"></script>

<script src="shared/services/login.service.js"></script>
<script src="shared/services/kwaaltjestest.service.js"></script>

为什么会这样?如果我删除kwaaltjestest,则login服务将有效。如果我删除login服务,则kwaaltjestest服务将起作用。更改index.html中的加载顺序不会改变任何内容。

1 个答案:

答案 0 :(得分:2)

因为你有

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

在这两个文件中,它正在重新定义模块,因此丢失了一个服务(在第一个&#34;版本&#34;中定义了该模块)Angular不会警告您重新定义模块幸运的是,它很容易修复你的html中加载的第二个服务,而不是在.module调用中包含依赖项,只是省略了那些获取现有模块并向其添加新服务。

angular.module('nutricia.services')

许多开发人员只需将模块定义在一个文件中,并且&#34;得到&#34;它在所有实际添加内容的内容中明确了它的定义。