0

Was ich hier mache, ist, habe ich einen Dienst erstellt, um die Daten zwischen Controller zu teilen, aber das Problem ist, dass der Controller ein anderes Modul hat. so mein Zweifel hier ist, wie kann ich Kommunikation zwischen zwei verschiedenen Controllern mit verschiedenen Modulen machen.Wie können Daten zwischen verschiedenen Modulen übertragen werden, indem ein Service mit zwei verschiedenen Controllern mit unterschiedlichen Modulen verwendet wird?

Hier ist mein Service
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 
     }; 

    } 

})(); 

Erste Controller 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)); 
       } 
      ) 
     } 



    } 
})(); 

zweiten Controller verify-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); 
    } 
})(); 

Bitte jemand helfen?

+0

Mögliche Duplikat [Erstellen von gemeinsamen Steuerungsfunktionen] (http://stackoverflow.com/questions/11324202/creating-common-controller-functions) – Mistalis

+0

Nein Diese Frage ist anders. Ich möchte einen Dienst erstellen, der Daten zwischen zwei Controllern mit unterschiedlichen Modulen übertragen kann. – SaMeEr

+0

Ich entferne das angular2-Tag, da dies wie eine angular1-Frage erscheint. Sag mir, wenn ich mich irre. – echonax

Antwort

1

Ich denke, du liegst nicht falsch. Aber ich denke, du solltest ein Modul für deine dataService machen und es zwischen anderen Modulen teilen. Sie dataService hängt nicht wirklich von Ihrem Login-Modul ab, damit Sie es unabhängig machen können.

etwas wie folgt aus:

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"]) 

Aber es ist subjektiv ...

Hoffe, dass es Hilfe gibt.

aktualisieren 1

Exemple hier plunkr

+0

immer noch, ich habe einen Fehler "Uncaught TypeError: Kann Eigenschaft 'addData' von undefined nicht lesen" – SaMeEr

+0

dataService scheint nicht definiert zu sein, haben Sie die Reihenfolge Ihres Imports überprüft? – nlarche

+0

ja. Es gibt/app/core/services innerhalb, dass ich einen Service mit Modul ('app.core') definiert habe und mit demselben importiere. Ist es richtig ? – SaMeEr

Verwandte Themen