Javascript 角度广播发射多次
我有以下htmlJavascript 角度广播发射多次,javascript,angularjs,Javascript,Angularjs,我有以下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="Child
<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>
ChildCtrl:
demoApp.controller('ChildCtrl', function($scope)
{
$scope.$on('UPDATE_RECORD', function (event, names)
{
$scope.receivedNames = names;
alert($scope.receivedNames);
});
});
当我单击“获取记录”按钮时,侦听器上的子控制器将被触发两次。如果名称数组有三个项,它将被激发3次。请帮助。这是因为您在控制器中写入了事件寄存器(
UPDATE\u RECORD
)。它将被调用的次数与ng repeat被调用的次数相同
为什么
您已经在ng repeat
中定义了子控制器,因此它将在每次迭代中执行,并且事件将被注册。因此,当您广播它时,它将执行所有已注册的事件
您应该将下面的代码移到父控制器
$scope.$on('UPDATE_RECORD', function (event, names)
{
$scope.receivedNames = names;
alert($scope.receivedNames);
});
这是因为您在控制器内部写入了事件寄存器(
UPDATE\u RECORD
)。它将被调用的次数与ng repeat被调用的次数相同
为什么
您已经在ng repeat
中定义了子控制器,因此它将在每次迭代中执行,并且事件将被注册。因此,当您广播它时,它将执行所有已注册的事件
您应该将下面的代码移到父控制器
$scope.$on('UPDATE_RECORD', function (event, names)
{
$scope.receivedNames = names;
alert($scope.receivedNames);
});
如果名称数组有N个项目,则在更新\记录上有N个子控制器,因此有N个侦听器…如果名称数组有N个项目,则在更新\记录上有N个子控制器,因此有N个侦听器…我的坏。。。我没有关上李牌。。谢谢但是如果我把上面的代码保存在ChildCtrl里呢?我的坏。。。我没有关上李牌。。谢谢但是如果我把上面的代码保存在ChildCtrl中呢?