javascript - AngularJS:$emit 方法发送重复数据

标签 javascript angularjs scope broadcast

在我的 AngularJS 应用程序中,我有三个 Controller 。一个是主 Controller ,另外两个是兄弟。

我有 Sibling control 1 将数据发送到 Main control,它广播数据,然后 sibling control 2 接收数据。

兄弟控制 1

$scope.selectedPatentFx;

$scope.$watch('selectedPatentFx', function(newValue, oldValue){ 
    if($scope.selectedPatentFx) {
       $scope.$emit('calculateFx', {patentfx: newValue});       
    }
})

主控

$scope.$on('calculateFx', function(event, obj){
    $scope.$broadcast('calculateFxBroadcast', {fx: obj})
}); 

兄弟对照 2

$scope.$on('calculateFxBroadcast', function(event, obj){
   //handle obj
})

问题是数据被发送了两次。但是它不会导致任何错误(到目前为止)。

问题

为什么数据被发射/广播两次?

最佳答案

我会避免在这里使用事件 ($broadcast)。您可以使用共享数据的服务来做到这一点。我创建了一个抽象示例,为您提供基本处理。

> 通过 Controller 之间的服务共享数据 - demo fiddle

查看

<div ng-controller="MyCtrl">
  <button ng-click="setData()">
        Set data
      </button>
  <h1>
    Controller1
  </h1>
  <hr>
  <p>
    {{data.getContactInfo()}}
  </p>
</div>
<div ng-controller="MyOtherCtrl">
  <br><br>
  <h1>
    Controller2
  </h1>
  <hr> {{data.getContactInfo()}}
</div>

AngularJS 应用

var myApp = angular.module('myApp', []);

myApp.controller('MyCtrl', function($scope, myService) {

  $scope.data = myService;

  $scope.setData = function() {
    myService.setContactInfo('Hello World');
  }
});

myApp.controller('MyOtherCtrl', function($scope, myService) {
  $scope.data = myService;
});


myApp.service('myService', function() {
    this.contactInfo = '';

    this.setContactInfo = function (data) {
        this.contactInfo = data;
    }

    this.getContactInfo = function () {
        return this.contactInfo;
    }
});

关于javascript - AngularJS:$emit 方法发送重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148694/

相关文章:

javascript - 如何将json数据推送到2级或n级数组中

javascript - 从某个位置读取 csv 文件并显示为 html 表格

javascript - 如何在移动设备上通过触摸左右滑动?

javascript - jQuery 查找文本并使用每个函数写入另一个标签属性

javascript - AngularJS,$watch 运行两次,无法进行旧/新值比较工作

angularjs - 如何使用指令从我的 Controller 切换元素上的幻灯片动画?

javascript - 基于 id/class 的选择器与基于表单的选择器

python - 异常处理的范围规则是什么?

javascript - 如何在 React 的并行组件中调用函数?

使用 setfenv 定义 Lua 变量范围