AngularJS: $emit 方法发送重复数据
AngularJS: $emit method sending duplicate data
在我的 AngularJS 应用程序中,我有三个控制器。一个是主控,另外两个是兄弟
我有 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
})
问题是数据被发送了两次。但是它不会导致任何错误(到目前为止)。
问题
为什么数据被emitted/broadcasted两次?
我会避免在这里使用事件 ($broadcast
)。您可以使用共享数据的服务来做到这一点。我创建了一个抽象示例,为您提供基本处理。
> 通过控制器之间的服务共享数据 - 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;
}
});
在我的 AngularJS 应用程序中,我有三个控制器。一个是主控,另外两个是兄弟
我有 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
})
问题是数据被发送了两次。但是它不会导致任何错误(到目前为止)。
问题
为什么数据被emitted/broadcasted两次?
我会避免在这里使用事件 ($broadcast
)。您可以使用共享数据的服务来做到这一点。我创建了一个抽象示例,为您提供基本处理。
> 通过控制器之间的服务共享数据 - 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;
}
});