javascript - Angular Broadcast 多次触发

标签 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="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/

相关文章:

javascript - 无需下载即可打开大尺寸pdf的方法(使用javascript上的open)

javascript - 将图像过滤器应用于 Canvas 图像数据或在 JavaScript 中

javascript - MongoDB, Node : Query ISODate fields with a query not build directly in find operation

javascript - angularjs ng-repeat中的动态互斥下拉列表

javascript - AngularJS 用函数调用数组

javascript - Angular Moment - 使用自定义语言环境对象更改语言环境

javascript - 当返回同一页面时,它停止滚动

javascript - 如何使用两个按钮启动和停止执行 JavaScript 脚本?

angularjs - 检测当前页面是否加载了AngularJS的方法

javascript - AngularJS 中共享数据服务初始化失败