【发布时间】:2016-06-30 04:52:36
【问题描述】:
我正在尝试使用 AngularJS $broadcast 事件在两个控制器中传递一些 data 和 action。但我在将数据作为值(而不是引用)传递时会遇到问题。
到目前为止,我首先创建了一个函数,该函数在 shopping-cart.controller.js 中使用 shoppingCart 的对象广播 sendCartPreview 事件
//function inside shopping-cart.controller.js
function sendCartPreview() {
var shoppingCart = $scope.shoppingCart;
$rootScope.$broadcast('sendCartPreview', 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 中的数据。我该如何做到这一点?在这方面需要您的帮助,任何形式的帮助将不胜感激,谢谢!
【问题讨论】:
-
使用 $rootScope.$apply() 或 $scope.$apply();
标签: javascript angularjs events broadcast