2016-06-30 27 views
0

Ich versuche, einige data und action innerhalb von zwei Controllern mit AngularJS $ Broadcast-Ereignis zu übergeben. Aber ich habe Probleme mit der Weitergabe der Daten als Wert (keine Referenz).

Was ich bisher getan habe, ist zunächst ich eine Funktion erstellt, die sendCartPreview Ereignis mit einem Objekt von shoppingCart innerhalb der Einkaufs-cart.controller.js ausgestrahlt

//function inside shopping-cart.controller.js 
function sendCartPreview() { 
    var shoppingCart = $scope.shoppingCart; 
    $rootScope.$broadcast('sendCartPreview', shoppingCart); 
} 

Dann habe ich einen Zuhörer der Veranstaltung hinzufügen auf eine weitere Steuerung, die die shoppingCart Daten und übergeben den Datenwert auf sendCartPreview Funktion in der Steuerung

//function inside chat.controller.js 
$scope.$on("sendCartPreview", function(event, message){ 
    sendCartPreview(message); 
}) 

Grundsätzlich ist die sendCartPreview Funktion empfangen die Objektdaten und addiert sie zu einem Array abrufen der Nachricht.

function sendCartPreview(shopping_cart) { 
    //some logic here and push the data to an array 
    vm.arrayOfMessage.push(shopping_cart); 
} 

Das Problem, das ich bin vor, wann immer $scope.shoppingCart Wert ändert, wird der Wert innerhalb vm.arrayOfMessage auch entsprechend den jeweiligen Änderungen ändern. Was ich in der Zwischenzeit erreichen möchte, ist die Übergabe der Daten als Wert (nicht als Referenz), so dass jedes Mal, wenn sich der Wert von $ scope.shoppingCart ändert, die Daten in vm.arrayOfMessage nicht beeinflusst werden. Wie erreiche ich das? Bitte brauchen Sie Ihre Hilfe in diesem, jede Art von Hilfe wäre dankbar, danke!

+0

Verwenden $ rootScope $ apply() oder Umfang $ $ apply();.. –

Antwort

1

Machen Sie eine tiefe Kopie Anruf wie sendCartPreview(angular.copy(message));

+0

danke! es löste wirklich die Probleme :) –

1

Das ist recht einfach. Ich nehme an, Sie haben auch jquery.

var cart = jQuery.extend(true, {}, shoppingCart); 

& Sendungswagen.

+0

Ich denke, dass ich angle.copy stattdessen bevorzuge. Trotzdem danke für die Hilfe! –