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