2017-06-27 3 views
0

Ich habe ein Problem mit der Freigabe von Daten zwischen den Controllern in angularjs Ich habe zwei HTML-Dateien, einen Controller für jeden von ihnen, einen Dienst Informationen zu teilen und eine normale App-Datei für das Routing.Freigeben von Daten zwischen zwei Controllern angularjs

Hier ist die erste Datei

<div class="container"> 
<button ng-click="broadcastData()"> Send </button> </div> 

Hier der entsprechende Regler ist für sie:

angular.module('myApp').controller('sendInfoController', 
['$scope','$rootScope','$location' 
    function ($scope,$rootScope, $location) 
{ 
    $scope.broadcastData=function() 
    { 
     shareInfoService.sendData({info: "Okay"}); 
     $location.path('/infoView'); 
    } 
}]); 

Hier ist die zweite HTML-Datei: (infoView.html)

<div> 
{{data}} 
</div> 

Hier ist die entsprechende Controller dafür:

angular.module('myApp').controller('infoController', 
['$scope','$rootScope', 
function ($scope,$rootScope) 
{ 
    $scope.data="hello"; 
    $rootScope.$on('sendTheData', function(event,args) 
    { 
      console.log(args); 
      $scope.data=args.info; 
    }); 
    console.log($scope.data); 
}]); 

Hier ist der Service-Informationen zu teilen:

angular.module('prkApp').factory('shareInfoService', 
    ['$rootScope', 
function ($rootScope) { 

//Return the particular function 
return ({ 
    sendData: sendData 
}); 

function sendData(data) 
{ 
    $rootScope.$broadcast('sendTheData', data); 
}; 
}]); 

Als ich in der ersten HTML-Datei auf die Schaltfläche klicken, wird der Standort geändert Infoview und shareInfoService.broadcastData Funktion aufgerufen wird.

Es leitet an die zweite HTML-Datei um. Die Information, die auf dieser Seite angezeigt wird, ist jedoch "Hallo" und nicht "Okay".

Die Webkonsole Protokolle zeigt {Info: "Okay"} zuerst und "Hallo" sofort danach.

Wie kann es korrigiert werden, um die Daten anzuzeigen, die vom vorherigen Controller gesendet wurden?

+0

Sie einen Fehler in der Konsole bekommen sind? Sie haben Ihren Dienst nicht dem ersten Controller hinzugefügt, und Ihr Dienst ist auf einer anderen App – Vivz

+0

Nein definiert. Keine Fehler in der Konsole. – adosbits

+0

Verwenden Sie die gleiche App oder möchten Sie Daten zwischen zwei verschiedenen eckigen Anwendungen teilen? – Vivz

Antwort

2

Sie senden die Übertragung, bevor Sie den Standort ändern, damit der Listener in infoController nicht geladen wird, wenn das Ereignis gesendet wird. Anstatt zu senden, können Sie den Wert im Service speichern und dann infoController abrufen, wenn es geladen wird.

Dienst

angular.module('prkApp').factory('shareInfoService', ['$rootScope', function($rootScope) { 
    var data; 

    //Return the particular function 
    return ({ 
     sendData: sendData, 
     getData: getData 
    }); 

    function sendData(new_data) { 
     data = new_data; 
    }; 

    function getData() { 
     return data; 
    } 
    } 
]); 

-Controller

angular.module('myApp').controller('infoController', ['$scope', '$rootScope', function($scope, $rootScope) { 
    $scope.data = "hello"; 
    console.log($scope.data); 
    $scope.data = shareInfoService.getData(); 
    console.log($scope.data); 
    } 
]); 
+0

Hey, während dies scheint zu arbeiten, wenn ich die zweite HTML-Seite aktualisieren. (derjenige, der die Informationen empfängt), bekomme ich "Hallo" und "undefiniert" in der Browser-Konsole. Auch die HTML-Seite zeigt nichts. Irgendeine Möglichkeit, dies zu umgehen, so dass die Informationen nicht verschwinden, wenn ich die Seite aktualisiere? – adosbits

Verwandte Themen