Javascript 如何使用angularJS$broadcast将对象数据作为值(而不是引用)传递
我试图通过使用AngularJS$广播事件在两个控制器内传递一些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
数据
和操作
。但我不希望将数据作为值(而不是引用)传递
到目前为止,我首先创建了一个函数,该函数在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。无论如何,谢谢你的帮助!