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!
Verwenden $ rootScope $ apply() oder Umfang $ $ apply();.. –