简体   繁体   English

在控制器中调用AngularJS服务函数时出错?

[英]Error while calling AngularJS service function in controller?

I wrote one service which takes a data from one controller and send it to another controller. 我编写了一项服务,该服务从一个控制器获取数据并将其发送到另一个控制器。 And this controllers are pointing to different modules. 该控制器指向不同的模块。 Now when I am calling the service function from both the controller it fires some error. 现在,当我从两个控制器调用服务函数时,它会引发一些错误。

angular.js:13920 ReferenceError: addData is not defined at Object.dataservice angular.js:13920 ReferenceError:Object.dataservice中未定义addData

Here is my service in pages.module.js 这是我在pages.module.js中的服务

(function ()
{
    'use strict';

    angular
        .module('app.pages', [
            'app.pages.auth.login',
            'app.pages.auth.login-v2',
            'app.pages.auth.register',
            'app.pages.auth.register-v2',
            'app.pages.auth.verify-mobile',
            'app.pages.auth.reset-password',
            'app.pages.auth.lock',
            'app.pages.coming-soon',
            'app.pages.error-404',
            'app.pages.error-500',
            'app.pages.invoice',
            'app.pages.maintenance',
            'app.pages.profile',
            'app.pages.search',
            'app.pages.timeline'
        ])
        .config(config)
        .factory('dataservice', dataservice);

    /** @ngInject */
    function config(msNavigationServiceProvider)
    {
        // Navigation
        msNavigationServiceProvider.saveItem('pages', {
            title : 'PAGES',
            group : true,
            weight: 2
        });
    }

     function dataservice(){

        var sendarr = [];

        this.addData = function(newObj) {
            sendarr.push(newObj);
        };

        this.getData = function(){
            return sendarr;
        };

        return {
            addData: addData,
            getData: getData
        };

    }
})();

this is 1st controller login.controller.js 这是第一个控制器login.controller.js

(function ()
{
    'use strict';

    angular
        .module('app.pages.auth.login')
        .controller('LoginController', LoginController);

    /** @ngInject */
    LoginController.$inject = ['dataservice'];
    function LoginController(msApi,$state,dataservice)
    {
        // Data
        var vm = this;

        vm.login = login;
        vm.startApp = startApp;
        vm.fbLogin = fbLogin;
        var auth2;
        // Methods
        function fbLogin(){
            FB.login(function(response){
                if(response.status=='connected'){
                    testAPI();
                }
                else if(response.status == 'not_authorized'){
                    console.log('error');
                }
                else{
                    console.log('please log in');
                }
            });
        }

        function testAPI() {
            console.log('Welcome!  Fetching your information.... ');
            FB.api('/me', function(response) {
                console.log('Successful login for: ' + response.name);

            });
        }

        function startApp(){
            gapi.load('auth2', function(){
            // Retrieve the singleton for the GoogleAuth library and set up the client.
                auth2 = gapi.auth2.init({
                client_id: '990822731291-21sdd22ujqc78l1q2i2lmf5hfe5satj1.apps.googleusercontent.com',
                cookiepolicy: 'single_host_origin',
                fetch_basic_profile: 'true',
                // Request scopes in addition to 'profile' and 'email'
                //scope: 'additional_scope'
                });
                attachSignin(document.getElementById('customGoogleBtn'));
             });
        }

        function attachSignin(element) {
            auth2.attachClickHandler(element, {},
                function(googleUser) {
                    var profile = googleUser.getBasicProfile();
                    console.log('ID: ' + profile.getId()); // Do not send to your backend! Use an ID token instead.
                    console.log('Name: ' + profile.getName());
                    console.log('Image URL: ' + profile.getImageUrl());
                    console.log('Email: ' + profile.getEmail());
                    var pushData = [profile.getId(), profile.getName(), profile.getEmail()];
                    console.log(pushData);
                    dataservice.addData(pushData);
                    $state.go('app.pages_auth_verify-mobile')
                }, 
                function(error) {
                    alert(JSON.stringify(error, undefined, 2));
            });
        }

        function login(){
            var jsonData = {"mobile":vm.form.mobile};
            msApi.request('login.credentials@save',jsonData,
                // SUCCESS
                function (response)
                {
                   console.log(response.error);
                    if(response.error == 1){
                        vm.form.mobileErrorFlag = true;
                    }
                    if(response.error == 0){
                        vm.form.mobileErrorFlag = false;
                    }
                },
                // ERROR
                function (response)
                {
                    alert(JSON.stringify(response));
                }
            )
        }



    }
})();

This one is the 2nd controller verify-mobile.controller.js 这是第二个控制器verify-mobile.controller.js

(function ()
{
    'use strict';

    angular
        .module('app.pages.auth.verify-mobile')
        .controller('VerifyMobileController', VerifyMobileController);

    /** @ngInject */
    function VerifyMobileController(dataservice)
    {
        var data = dataservice.getData();

        alert(data);
    }
})();

You had the methods as this.addData and this.getData in your dataservice whereas you are accessing the same without this in the return. 你有方法为this.addDatathis.getData在你dataservice ,而你正在访问同一个无this的回报。 That's why you are getting this error. 这就是为什么您会收到此错误。

You don't need the this inside the factory service and can remove the same as below. 您无需在factory service使用this即可删除以下内容。

function dataservice(){

        var sendarr = [];

        var addData = function(newObj) {
            sendarr.push(newObj);
        };

        var getData = function(){
            return sendarr;
        };

        return {
            addData: addData,
            getData: getData
        };

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM