Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用angularJS$broadcast将对象数据作为值(而不是引用)传递_Javascript_Angularjs_Events_Broadcast - Fatal编程技术网

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

Javascript 如何使用angularJS$broadcast将对象数据作为值(而不是引用)传递,javascript,angularjs,events,broadcast,Javascript,Angularjs,Events,Broadcast,我试图通过使用AngularJS$广播事件在两个控制器内传递一些数据和操作。但我不希望将数据作为值(而不是引用)传递 到目前为止,我首先创建了一个函数,该函数在shopping-cart.controller.js中广播sendCartPreview事件,对象为shoppingCart //function inside shopping-cart.controller.js function sendCartPreview() { var shoppingCart = $scope.sho

我试图通过使用AngularJS$广播事件在两个控制器内传递一些
数据
操作
。但我不希望将数据作为值(而不是引用)传递

到目前为止,我首先创建了一个函数,该函数在shopping-cart.controller.js中广播
sendCartPreview
事件,对象为
shoppingCart

//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))

进行深度复制调用,如
sendCartPreview(angular.copy(message))

这很容易。我想您也有jquery

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

&广播车。

这很容易。我想您也有jquery

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

&广播购物车。

您可以使用angular.copy获取更多信息:

您可以使用angular.copy获取更多信息:

使用$rootScope。$apply()或$scope。$apply();使用$rootScope.$apply()或$scope.$apply();我想我更喜欢使用angular.copy。无论如何,谢谢你的帮助!我想我更喜欢使用angular.copy。无论如何,谢谢你的帮助!