2016-02-12 122 views
0

我正在开发一个应用程序使用MVC和angularjs和非常新的angularjs。该代码使用很多不同的js文件中定义不同的工厂和那些工厂模块正确注射,但仍然我看到“工厂没有定义错误”Angularjs - 工厂是undefined

的app.js低于: -

(function() { 
      'use strict'; 

     angular.module('MyApp', ['common.core', 'common.ui']) 
      .run(run); 

      run.$inject = ['$rootScope', '$location', '$cookieStore',   '$http','membershipService']; 

     function run($rootScope, $location, $cookieStore, $http) { 
      // handle page refreshes 
      $rootScope.repository = $cookieStore.get('repository') || {}; 
      if ($rootScope.repository.loggedUser) { 
       $http.defaults.headers.common['Authorization'] = $rootScope.repository.loggedUser.authdata; 
      } 
     } 
    })(); 

厂在单独的文件中的定义如下: -

(function (app) { 
     'use strict'; 

     var app = angular.module('MyApp'); 
     app.factory('membershipService', membershipService); 

     membershipService.$inject = ['apiService', 'notificationService','$http', '$base64', '$cookieStore', '$rootScope']; 

     function membershipService(apiService, notificationService, $http, $base64, $cookieStore, $rootScope) { 

      var service = { 
       login: login, 
       register: register, 
       saveCredentials: saveCredentials, 
       removeCredentials: removeCredentials, 
       isUserLoggedIn: isUserLoggedIn 
      } 

      function login(user, completed) { 
       apiService.post('/api/account/authenticate', user, 
       completed, 
       loginFailed); 
      } 

      function register(user, completed) { 
       apiService.post('/signup', user, 
       completed, 
       registrationFailed); 
      } 

      function saveCredentials(user) { 
       var membershipData = $base64.encode(user.username + ':' + user.password); 

       $rootScope.repository = { 
        loggedUser: { 
         username: user.username, 
         authdata: membershipData 
        } 
       }; 

       $http.defaults.headers.common['Authorization'] = 'Basic ' + membershipData; 
       $cookieStore.put('repository', $rootScope.repository); 
      } 

      function removeCredentials() { 
       $rootScope.repository = {}; 
       $cookieStore.remove('repository'); 
       $http.defaults.headers.common.Authorization = ''; 
      }; 

      function loginFailed(response) { 
       notificationService.displayError(response.data); 
      } 

      function registrationFailed(response) { 

       notificationService.displayError('Registration failed. Try again.'); 
      } 

      function isUserLoggedIn() { 
       return $rootScope.repository.loggedUser != null; 
      } 

      return service; 
     } 
    })(angular.module('common.core')); 

控制器被定义如下: -

(function (app) { 
    'use strict'; 
    var app = angular.module('MyApp'); 
    app.controller('SignUpController', SignUpController); 

    SignUpController.$inject = ['$scope', 'membershipService', 'notificationService', '$rootScope', '$location']; 

     function SignUpController($scope, membershipService, notificationService, $rootScope, $location) { 
      $scope.pageClass = 'page-login'; 
      $scope.register = register; 
      $scope.user = {}; 
     }; 

     function register() { 
      membershipService.register($scope.user, registerCompleted) 
     } 

     function registerCompleted(result) { 
      if (result.data.success) { 
       membershipService.saveCredentials($scope.user); 
       notificationService.displaySuccess('Hello ' + $scope.user.username); 
       $scope.userData.displayUserInfo(); 
       $location.path('/'); 
      } 
      else { 
       notificationService.displayError('Registration failed. Try again.'); 
      } 
     } 
    })(angular.module('common.core')); 

脚本加载象下面这样: -

bundles.Add(new ScriptBundle("~/bundles/Controllers").Include(
       "~/Scripts/Controllers/app.js", 
       "~/Scripts/Services/apiService.js", 
       "~/Scripts/Services/notificationService.js", 
       "~/Scripts/Services/membershipService.js", 
       "~/Scripts/Services/fileUploadService.js", 
       "~/Scripts/Controllers/SignUpController.js" 

的“注册”功能将抛出一个错误“membershipservice没有定义”,我在做什么错?请帮忙。

回答

2

我看到这一点:

run.$inject = ['$rootScope', '$location', '$cookieStore', '$http','membershipService']; 

function run($rootScope, $location, $cookieStore, $http) { 
     // handle page refreshes 

你缺少的函数参数列表中的membershipService

而且这样的:

SignUpController.$inject = ['$scope', 'membershipService', 'notificationService', '$rootScope', '$location']; 

    function SignUpController($scope, membershipService, notificationService, $rootScope, $location) { 
     $scope.pageClass = 'page-login'; 
     $scope.register = register; 
     $scope.user = {}; 
    }; 

    function register() { 
     membershipService.register($scope.user, registerCompleted) 
    } 

    function registerCompleted(result) { 
     if (result.data.success) { 
      membershipService.saveCredentials($scope.user); 
      notificationService.displaySuccess('Hello ' + $scope.user.username); 
      $scope.userData.displayUserInfo(); 
      $location.path('/'); 
     } 
     else { 
      notificationService.displayError('Registration failed. Try again.'); 
     } 
    } 

这行不通,因为你所定义的功能之外的功能,你传递membershipService成。

SignUpController应该是这个样子:

 function SignUpController($scope, membershipService, notificationService, $rootScope, $location) { 
      $scope.pageClass = 'page-login'; 
      $scope.register = register; 
      $scope.user = {}; 

      function register() { 
       membershipService.register($scope.user, registerCompleted) 
      } 

      function registerCompleted(result) { 
       if (result.data.success) { 
        membershipService.saveCredentials($scope.user); 
        notificationService.displaySuccess('Hello ' + $scope.user.username); 
        $scope.userData.displayUserInfo(); 
        $location.path('/'); 
       } 
       else { 
        notificationService.displayError('Registration failed. Try again.'); 
       } 
      } 
     }; 

看,你的方法SignUpController是在DI将注入参数代入。

但是,你已经定义了需要这些参数之外SignUpController功能范围功能

+0

糟糕!谢谢,让我试试看。再次感谢 – AjS

+0

完全没问题! –

+0

@AjS你怎么了? –