Angularjs--工厂未定义

Angularjs--factory is undefined

我正在使用 MVC 和 angularjs 开发一个应用程序并且对 angularjs 非常陌生。该代码使用了许多在单独的 js 文件中定义的不同工厂,这些工厂已正确注入模块,但我仍然看到 'factory not defined error'

下面是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"

'register' 函数抛出错误 'membershipservice not defined',我做错了什么?请帮忙。

我看到了这个:

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 函数

的范围之外