控制器和服务未加载到angularjs中

时间:2013-05-22 12:24:27

标签: angularjs requirejs angularjs-service

我已经将我的角度应用程序集成了requirejs。 但是在加载应用时,它会给我一个错误'Argument 'appCtrl' is not a function, got undefined'

这是我的控制器代码:

define(['Angular'], function (angular) {
   function appCtrl($scope, pathServices) {
     alert('sa');
   }

   function homeCtrl($scope, brandService) {
         console.log('dfd');
   }
});

除此之外,它还为'unknown provider pathServices'

提供了错误

服务代码是:

serviceConfig.js

define([
    'Angular',
    'common/Services/services',
    'current/js/services'
], function(angular, commonServices, loacalStorageServices, currentServices) {
    "use strict";

    var services = {
        commonServices : commonServices,
        currentServices : currentServices,
    };

    var initialize = function (angModule) {
        angular.forEach(services,function(service, name) {
            angModule.service(name, service);
        });
    }

    return {
        initialize: initialize
    };
});

公共/ services.js

define(['Angular'], function (angular) {
   var app = angular.module('myApp.services', []);
   app.factory('pathServices', function($http, $q, $rootScope) {
    function pathServices() {
            alert('as');
    }
    return new pathServices();
   });

   app.factory('anotherServices', function($http, $q, $rootScope) {
    function anotherServices() {
            alert('as');
    }
    return new anotherServices();
   });
});

电流/ services.js

define(['Angular'], function(angular) {

    var app = angular.module('myApp.services', []);

    app.factory('brandsService', function() {
        function brandsService() {
            var autoCompleteData = [];
            this.getSource =  function() {
                return autoCompleteData;
            }

            this.setSource = function(states) {
                autoCompleteData = states;
            }
        }
        return new brandsService();
    });
});

在serviceConfig.js中我已经包含了2个服务文件..但问题是,最后一个当前/ service.js文件会覆盖所有文件..如何包含多个服务文件?

我是requirejs的新手。如何使用requirejs使用控制器功能和服务? 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您必须在全局(窗口)命名空间中声明您的函数,或使用moduleName.controller('controllerName',controllerFn)

在模块中注册它们

所以要么

define(['Angular'], function (angular) {
 window.appCtrl = function($scope, pathServices) {
   alert('sa');
 }

 window.homeCtrl = function($scope, brandService) {
     console.log('dfd');
  }
});

define(['Angular'], function (angular) {
 var module = angular.module('theModuleName');
 module.controller('appCtrl', function($scope, pathServices) {
   alert('sa');
 });

 module.controller('homeCtrl', function($scope, brandService) {
     console.log('dfd');
  }
});

应修复此错误(我更喜欢第二种方法)。