javascript - 无法连接AngularJS中的服务功能

标签 javascript angularjs undefined

我有以下代码:

Service:

(function () {
    'use strict';

    angular
        .module('myApp')
        .factory('ServiceFactory', ServiceFactory);

    ServiceFactory.$inject = ['$http', '$rootScope', 'serviceURLHostFactory','$q'];

    var config = {
        // TO DO : check if anything required
    };

    /* @ngInject */
    function ServiceFactory($http, $rootScope, serviceURLHostFactory, $q) {

        
        var session = {};
        var userName = null;
        var userId = null;
        var pwd = null;
       
        

        function getUserSession() {
            return session;
        }

        function setUserSession(session) {
            session = session;
        }

        function getUserName() {
            return userName;
        }

        function setUserName(userName) {
            userName = userName;
        }

        function getUserId() {
            return userId;
        }

        function setUserId(userId) {
            userId = userId;
        }

        function getPwd() {
            return pwd;
        }

        function setPwd(pwd) {
            pwd = pwd;
        }

       
        var service = {
            getUserSession: getUserSession,
            setUserSession: setUserSession,
            getUserName: getUserName,
            setUserName: setUserName,
            getUserId: getUserId,
            setUserId: getUserId,
            getPwd:getPwd,
            setPwd:setPwd,
            getLoginSession: getLoginSession
        };

		var response ={};
        //Fetch Use Session
        function getLoginSession() {
            var URL = serviceURLHostFactory.getServiceServerHost();

            /*return $http({
                        method: 'POST', 
                        url: 'response.json', 
                        data: {'username': getUserName, 'pwd': getPwd}
                    })
                .then(httpCompleted)
                .catch(httpFailed);*/
            response = user":{"uid":"3","name":"xyz","mail":"test23@localhost.com","theme":"","signature":"","signature_format":"filtered_html","created":"1462429963","access":"1462445668","login":1462445753,"status":"1","timezone":"Asia/Kolkata","language":"","picture":null,"data":false,"roles":{"2":"authenticated user"},"rdf_mapping":{"rdftype":["sioc:UserAccount"],"name":{"predicates":["foaf:name"]},"homepage":{"predicates":["foaf:page"],"type":"rel"}}}}
            return response;

            function httpCompleted(response) {
                return response.data;
            }

            function httpFailed(e) {
                console.error('Unable to Login' + JSON.stringify(e));
                return $q.reject(e);
            }
        }



        return response;
    }
})();

Ctrl:

(function () {
  'use strict';

angular
    .module('myApp')
    .controller('LoginCtrlr', LoginCtrlr);

LoginCtrlr.$inject = ['$scope','$cookieStore','ServiceFactory','$timeout', '$q', '$document', '$rootScope', '$window'];

/* @ngInject */
function LoginCtrlr($scope, $cookieStore, ServiceFactory, $timeout, $q, $document, $rootScope, $window) {


    var vm = this;

    vm.errMessageLogin = '';
    var errMessageLogin = {}; // error message json object
    var errMessageArrayLogin = []; // error message  array
    var constErrMessageLogin = "Please select a Resort from the drop down list.";
    //vm.setErrorMessage = setErrorMessage;

    initialize();


    function setProcessingParameters(message) {
        vm.messageTxt = message;
        vm.processingUrl = '/login.html';
    }

    function openProgressBar() {
        var defer = $q.defer();
        vm.globalPromise = defer.promise;
        return defer;
    }

    function initialize() {
        var defer = $q.defer();
        var deferTimer = $q.defer();

        $timeout(function () {
            if (defer !== null) {
                //vm.setProcessingParameters('No Message');
                //defer = vm.openProgressBar();
                deferTimer.resolve();
            }
        }, 1000);

        deferTimer.promise.then(function () {
            $timeout(function () {
                if (defer !== null) {
                    defer.resolve();
                    //vm.setProcessingParameters('Please Wait...');
                    //defer = vm.openProgressBar();
                }

            }, 4000);
        });

        vm.loggedInUserId = $cookieStore.get('userId') || null;
        console.log("getSession..");
        $cookieStore.remove('userId');

        if (vm.loggedInUserId !== '') {
            vm.loggedInUserId = vm.loggedInUserId;
        } else {
            vm.loggedInUserId = '';
        }
        console.log('Login Name in bank in UI controller : ' + vm.loggedInUserId);
        if (vm.loginInUserId === undefined) {
            vm.loginInUserId = '';
        }

        if (vm.loggedInUserId !== undefined && vm.loggedInUserId !== '' && vm.loggedInUserId !== null) {
            console.log("User exists..logged in");
        }
        else {

            var sessionService = ServiceFactory.getLoginSession();
            sessionService
                .then(onAuthenticated )
                .catch(onRejectedRequest)
                .finally(sessionServiceFinally);

        }

        function onAuthenticated(resposne) {
            console.log('User Session :'+ resposne.data);

            $cookieStore.put('userId', resposne.data.userId);
            //Set the suer session here and in session name, id etc can be set in factory
            ServiceFactory.setUserSession(resposne.data);

             vm.deferPromise.promise.then(closeProgressBar);
        }

        function onRejectedRequest(e) {
            console.error('Error in Response of Events List :: ' + JSON.stringify(e.data));
            if (e.status === 401 || e.status === 403) {
                var logoutURL = $window.location.protocol + '//' + $window.location.host + '/ui/logout.html';
                $window.location.assign(logoutURL);
            } else {
                if (e.status === 500 || e.status === 404) {
                    alert(e.data.code + ':' + e.data.message);
                } else {
                    alert(e.data.errMsg);
                }
            }
        }

        function sessionServiceFinally() {
            defer.resolve();
            defer = null;
        }

        function closeProgressBar() {
            defer.resolve();
            defer = null;
        }
    }
}
})();

在这里,我试图存储用户登录时的 session 。它抛出以下错误:

TypeError: undefined is not a function at initialize (http://localhost:9000/scripts/controllers/login.js:78:53) at new LoginCtrlr (http://localhost:9000/scripts/controllers/login.js:22:9) at - var sessionService = ServiceFactory.getLoginSession();

最佳答案

看起来您的工厂服务尚未公开 Controller 或其他服务将使用的所有公共(public)方法;前任。 setUserSession、getLoginSession 等。我发现还有其他问题,但错误 undefined is not a function 是因为您尚未将方法公开给外界。

为了做到这一点,您的服务必须遵循以下模式:

    (function () {
    'use strict';

    angular
        .module('myApp')
        .factory('ServiceFactory', ServiceFactory);

    ServiceFactory.$inject = ['$http', '$rootScope', 'serviceURLHostFactory','$q'];

    var config = {
        // TO DO : check if anything required
    };

    /* @ngInject */
    function ServiceFactory($http, $rootScope, serviceURLHostFactory, $q) {


        var session = {};
        var userName = null;
        var userId = null;
        var pwd = null;



        function getUserSession() {
            return session;
        }

        function setUserSession(session) {
            session = session;
        }

        function getUserName() {
            return userName;
        }

        function setUserName(userName) {
            userName = userName;
        }

        function getUserId() {
            return userId;
        }

        function setUserId(userId) {
            userId = userId;
        }

        function getPwd() {
            return pwd;
        }

        function setPwd(pwd) {
            pwd = pwd;
        }


        return {
            getUserSession: getUserSession,
            setUserSession: setUserSession,
            getUserName: getUserName,
            setUserName: setUserName,
            getUserId: getUserId,
            setUserId: getUserId,
            getPwd:getPwd,
            setPwd:setPwd,
            getLoginSession: getLoginSession
        };

    }
})();

关于javascript - 无法连接AngularJS中的服务功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073390/

相关文章:

javascript - Coffeescript 中某种 _ref 的用法?

javascript - 用 jquery 替换文档

javascript - 解析数组的困难

javascript - 即使使用 angular.fromJson() 也无法从 json 对象访问字符串

angularjs - Angular Material 下拉标签未使用 Angular 翻译进行更新

javascript - 没有浏览器的javascript中的GUI应用程序?

angularjs - Angular-UI typeahead 显示特定字符

javascript - 对象文字表示法中的方法记录到控制台,但也记录未定义

javascript - 通过窗口对象引用全局变量时未定义的全局变量

php - OpenCart 中 undefined variable