如何使用 angularJS $broadcast 将对象数据作为值(而非引用)传递
How do I pass an object data as a value (not as reference) using angularJS $broadcast
我试图通过使用 AngularJS $broadcast 事件在两个控制器中传递一些 data
和 action
。但是我在将数据作为值(而不是引用)传递时遇到了问题。
到目前为止我所做的是首先我创建了一个广播 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
我试图通过使用 AngularJS $broadcast 事件在两个控制器中传递一些 data
和 action
。但是我在将数据作为值(而不是引用)传递时遇到了问题。
到目前为止我所做的是首先我创建了一个广播 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