1

Angular アプリに 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
    };
});

common/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();
   });
});

current/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 つのサービス ファイルを含めました。しかし、問題は、最後の current/service.js ファイルがすべてのファイルを上書きすることです。複数のサービス ファイルを含めるにはどうすればよいですか?

私はrequirejsが初めてです。requirejs を使用してコントローラー機能とサービスを使用するにはどうすればよいですか? 誰でも助けることができますか?

4

1 に答える 1

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');
  }
});

このエラーを修正する必要があります (私は 2 番目の方法を好みます)。

于 2013-05-22T12:47:00.873 に答える