0

Что я здесь делаю, я создал одну услугу для обмена данными между контроллером, но проблема заключается в том, что у контроллера есть разные модули. поэтому я сомневаюсь, что я могу сделать связь между двумя разными контроллерами, имеющими разные модули.Как передавать данные между различными модулями с использованием службы, имеющей два разных контроллера с различными модулями?

Вот моя служба
login.service.js

(function() 
{ 
    'use strict'; 

    angular 
     .module('app.pages.auth.login') 
     .factory('dataService', dataService); 

    /** @ngInject */ 
    function dataService(){ 

     var sendarr = []; 

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

     var 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 */ 
    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)); 
       } 
      ) 
     } 



    } 
})(); 

Второй контроллер проверить-mobile.controller.js

(function() 
{ 
    'use strict'; 

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

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

     alert(data); 
    } 
})(); 

Пожалуйста, помогите кому-нибудь?

+0

Возможная Дубликат [Создание функций общего контроллера] (http://stackoverflow.com/questions/11324202/creating-common-controller-functions) – Mistalis

+0

Нет , Этот вопрос другой. Я хочу создать службу, которая сможет передавать данные между двумя контроллерами, имеющими разные модули. – SaMeEr

+0

Я удаляю знак angular2, так как это кажется угловым вопросом. Скажи мне, если я ошибаюсь. – echonax

ответ

1

Я думаю, вы не ошибаетесь. Но я думаю, вы должны сделать модуль для своего dataService и поделиться им между другими модулями. Вы dataService действительно не зависят от вашего модуля входа, поэтому вы можете сделать его независимым.

что-то вроде этого:

angular 
    .module('app.services.shared') 
    .factory('dataService', dataService); 

angular 
    .module('app.pages.auth.login',["app.services.shared"]) 
angular 
    .module('app.pages.auth.verify-mobile',["app.services.shared"]) 

Но это субъективно ...

Надеется, что это поможет.

Update 1

Exemple здесь plunkr

+0

все еще, я получил одну ошибку «Uncaught TypeError: Не удается прочитать свойство« addData »неопределенного« – SaMeEr

+0

dataService, кажется, не определено, вы проверили порядок импорта? – nlarche

+0

да. есть/app/core/services внутри, что я определил службу с модулем ('app.core') и импортировал с тем же. Это правильно ? – SaMeEr