javascript - 在 AngularJS 中只注册一次事件监听器

标签 javascript angularjs

我正在将一个事件从我的导航栏 Controller 广播到另一个 Controller ,但是如果我多次初始化 Controller (当我前后移动应用程序时),在我的 $on< 上执行的函数 事件运行多次,因为它被注册了多次。

$rootScope.$on('submitBookingDialog', function(){
    submitBookingDialog();
});

如何防止 submitBookingDialog() 发生不止一次?

我找到了 a solution , 但我不知道它是否理想。

最佳答案

首先,是否需要在$rootScope上发送事件?如果没有,那么您可以在 $scope 上注册您的事件处理程序。只要您的 Controller 范围被销毁,事件处理程序就会被销毁。然后,您将通过 $scope.$emit$scope.$broadcast 发送事件,具体取决于您的 Controller 层次结构。

也就是说,销毁事件监听器所需要做的就是调用注册监听器时返回的注销函数:

var offSubmitBookingDialog = $rootScope.$on('submitBookingDialog', function(){
    submitBookingDialog();
});

$scope.$on('$destroy', function() {
    // Call the deregistration function when the scope is destroyed
    offSubmitBookingDialog();
});

关于javascript - 在 AngularJS 中只注册一次事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24490429/

相关文章:

javascript - 将用户重定向到存储在变量中的 url (Javascript)

javascript - 如何删除这个 HTML?

javascript - AngularJS 指令不包含在父元素中

c# - HiddenField 始终为 NULL,来自 javascript

javascript - 为什么 Array.prototype.fill() 的这个示例会抛出 TypeError?

javascript - 如何使用 ng-if 显示列表中是否定义了某个项目

android - 在后退按钮上关闭 cordova 应用程序

angularjs - 将 Angular JS 1.6.10 迁移到 1.7.8

javascript - Nodejs 中的 log4js-node 未记录到文件

javascript - 用谷歌地图绘制饼图