Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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:$emit方法发送重复数据_Javascript_Angularjs_Scope_Broadcast - Fatal编程技术网

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

Javascript AngularJS:$emit方法发送重复数据,javascript,angularjs,scope,broadcast,Javascript,Angularjs,Scope,Broadcast,在我的AngularJS应用程序中,我有三个控制器。一个是主控制器,另外两个是兄弟控制器 我有同级控件1将数据发送到主控件,主控件广播数据,然后由同级控件2拾取数据 同胞对照1 主控 同胞对照2 问题是数据被发送了两次。但是,它不会导致任何错误(到目前为止) 问题 为什么要发射/广播两次数据 我会避免在这里使用事件($broadcast)。您可以通过使用共享数据的服务来实现这一点。我创建了一个抽象示例,它向您提供了基本的处理方法 >通过控制器之间的服务共享数据- 看法 尝试添加条件以验证newV

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

我有
同级控件1
将数据发送到
主控件
,主控件广播数据,然后由
同级控件2
拾取数据

同胞对照1

主控

同胞对照2

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

问题


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

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

>通过控制器之间的服务共享数据-

看法
尝试添加条件以验证newValue和oldValue是否不同,然后仅发出ex:simply
如果(newValue&&newValue!=oldValue)
selectedPatentFx watch
可能执行两次。仍在调用两次@RahulSharma,可能,旋转木马函数中的selectedPatentFx值会发生变化:/您应该尝试@Supercol建议的方法。我将尝试这种方法谢谢您的建议。帮了我很多忙。如果我几个月前采取这种方法就好了
$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})
}); 
$scope.$on('calculateFxBroadcast', function(event, obj){
   //handle obj
})
<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>
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;
    }
});