我有以下 html
<div ng-controller = "ParentCtrl">
Parent Div
<input type="button" ng-click="getNames()" value="Get Records"></button>
<li ng-repeat = "name in names">{{name}}</name>
<div ng-controller="ChildCtrl">
<li ng-repeat = "name in receivedNames">dsds{{name}}</name>
</div>
</div>
父Ctrl:
demoApp.controller('ParentCtrl', function($scope){
$scope.getNames = function()
{
$scope.names = ['John','Andrew'];
$scope.$broadcast('UPDATE_RECORD', $scope.names);
}
});
子Ctrl:
demoApp.controller('ChildCtrl', function($scope)
{
$scope.$on('UPDATE_RECORD', function (event, names)
{
$scope.receivedNames = names;
alert($scope.receivedNames);
});
});
当我单击“获取记录”按钮时,监听器上的子 Controller 被触发两次。如果名称数组包含三个项目,它将被触发 3 次。请帮忙。
最佳答案
这是因为您在智利 Controller 中编写了事件寄存器(UPDATE_RECORD
)。它将被调用的次数与 ng-repeat 被调用的次数一样多。
为什么
您已经在ng-repeat
中定义了子 Controller ,因此它将在每次迭代时执行,并且事件将被注册。所以当你广播它时,它将执行所有注册的事件。
您应该将以下代码移至父 Controller 。
$scope.$on('UPDATE_RECORD', function (event, names)
{
$scope.receivedNames = names;
alert($scope.receivedNames);
});
关于javascript - Angular Broadcast 多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735082/