2015-03-23 3 views
3

Я использую AngularAMD + RequirsJS для одностраничного приложения, и у меня возникают некоторые проблемы при инъекции службы в файл app.js.Угловая инъекция с использованием RequireJS

Здесь код:

login_service.js

define(['app'], function(app) { 
'use strict'; 

    app.service('loginService', function($location, $state, Restangular) { 

     return { 

      login: function(data, scope) {}, 

      logout: function() {}, 

      isLogged: function() {} 

     } 

    }); 

}); 

app.js

define(['angularAMD', 'restangular', 'angular-ui-router'], function(angularAMD) { 
'use strict'; 

    var app = angular.module('MyApp', ['restangular', 'ui.router', 'loginService']); 

    app.run(function($rootScope, $state, $stateParams, $location, loginService) { 

     console.log(loginService) 

     /* 
     Error: [$injector:modulerr] Failed to instantiate module MyApp due to: [$injector:modulerr] 
     Failed to instantiate module loginService due to: 
     $injector:nomod] Module 'loginService' is not available! You either misspelled the module name or forgot to load it. 
     */ 

    }); 

    app.config(function($stateProvider, $urlRouterProvider, $i18nextProvider, RestangularProvider) { 

    }); 

}); 

Я бы любил, чтобы получить доступ к loginService в функции запуска, но может» t, поскольку я продолжаю получать сообщение об ошибке «Не удалось создать модуль MyApp».

Я пытался загрузить файл службы входа в систему следующим образом:

define(['angularAMD', 'restangular', 'angular-ui-router', 'services/login_service'], function(angularAMD) { 

}); 

Но тогда у меня есть другая ошибка с указанием, что приложение не определено в Вход службы.

Большое спасибо за помощь.

Дэвид

ответ

0

Он happeing, потому что «loginService» не является модулем это услуга, и вы не можете добавить «loginService» (услуга) к модулю можно только добавить только модуль в другой модуль. вы можете сделать одну вещь: -

var app = angular.module('loginService',[]); 
app.service('loginService', function($location, $state, Restangular) { 

     return { 

      login: function(data, scope) {}, 

      logout: function() {}, 

      isLogged: function() {} 

     } 

    }); 

Ps: - Я не уверен в этом :-P

+0

Спасибо squiroid, он отлично работает. – JDL

+0

Отличное кодирование :) – squiroid

+0

@ Dave747 как он стал вашим app.js? У меня такая же проблема –

0

Проблема вызвана тем, что requireJS загружает файлы динамически и это гарантирует Вам, что файлы уже загружены до запуска кода.

Вы должны сделать следующее:

  1. Удалить ng-app из вашего HTML

  2. Использование ручного самонастройки:

    angular.element().ready(function(){ 
         angular.bootstrap(document,['MyApp']); 
    
        }); 
    
+0

Спасибо за помощь – JDL