角度事件监听器

时间:2016-01-28 16:29:13

标签: angularjs-service angularjs-factory

我正在为一个客户工作一个庞大的项目,所以为了使代码更清洁,我正在做一些返工。我有这部分代码:

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);

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

1 个答案:

答案 0 :(得分:0)

要么打电话

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

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

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

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