angular 事件侦听器

angular event listener

我正在为客户处理一个大型项目,因此为了使代码更清晰,我正在做一些返工。我有这部分代码:

var removeListener = $rootScope.$on('logoutEvent', function () {
    changedAttribut = EditorialContentService.getChangedAttribut($scope.promotion, OLDPromo, hasUploadImage);
    if (changedAttribut.length < 1) {
        $rootScope.canClose = true;
    } else {
        $rootScope.canClose = false;
    }
});
$scope.$on("$destroy", removeListener);

问题是,我需要将代码放在服务或工厂或任何其他建议中,以避免重复,因为它在许多控制器中使用。

要么打电话

$rootScope.$on("$destroy", removeListener);

(而不是 $scope),它将在整个应用程序被销毁时删除侦听器(但这并不是真正需要的,因为在 $on 注册的事件在它们注册的范围被销毁时会自动删除), 或者从工厂公开一个函数来移除监听器,并在适当的范围销毁时调用它:

// inside the factory
return {
    destroy: function () {
        removeListener();
    }
};

// inside the appropriate controller
$scope.$on('$destroy', thatFactory.destroy);