2016-11-28 64 views
0

我寫了一個服務,它從一個控制器獲取數據並將其發送到另一個控制器。而這個控制器指向不同的模塊。現在,當我從控制器調用服務功能時,它會引發一些錯誤。在控制器中調用AngularJS服務函數時出錯?

angular.js:13920 ReferenceError: addData is not defined at Object.dataservice

這是我在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 
     }; 

    } 
})(); 

這是第一控制器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('[email protected]',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)); 
       } 
      ) 
     } 



    } 
})(); 

這一個是第二控制器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); 
    } 
})(); 
+0

你可以試試我的下面的答案嗎? – Aruna

回答

1

你有方法爲this.addDatathis.getDatadataservice,而您在返回訪問同一個無this。這就是你得到這個錯誤的原因。

您不需要factory service中的this,並且可以刪除下面的相同內容。

function dataservice(){ 

     var sendarr = []; 

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

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

     return { 
      addData: addData, 
      getData: getData 
     }; 

    } 
相關問題