如何使用 angularJS $broadcast 将对象数据作为值(而非引用)传递

How do I pass an object data as a value (not as reference) using angularJS $broadcast

我试图通过使用 AngularJS $broadcast 事件在两个控制器中传递一些 dataaction。但是我在将数据作为值(而不是引用)传递时遇到了问题。

到目前为止我所做的是首先我创建了一个广播 sendCartPreview 事件的函数,其中对象为 shoppingCart inside shopping-cart.controller.js

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

然后我在另一个控制器上添加事件侦听器,它检索 shoppingCart 数据并将数据值传递给控制器​​内的 sendCartPreview 函数

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

基本上 sendCartPreview 函数接收到对象数据并将其添加到消息数组中。

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

我面临的问题是,每当 $scope.shoppingCart 值发生变化时, vm.arrayOfMessage 中的值也会根据各自的变化而变化。与此同时,我想要实现的是将数据作为一个值(而不是通过引用)传递,这样每次 $scope.shoppingCart 值发生变化时,它都不会影响 vm.arrayOfMessage 中的数据。我该如何实现?在这方面请您提供帮助,我们将不胜感激,谢谢!

sendCartPreview(angular.copy(message));

一样进行深度复制调用

这很简单。我假设你也有 jquery。

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

&广播购物车。

您可以使用 angular.copy,了解更多信息:https://docs.angularjs.org/api/ng/function/angular.copy