javascript - 我应该将事件监听器代码放在所有 Controller 都使用的 AngularJS 中的什么位置?

标签 javascript angularjs angularjs-scope

我想在我的 AngularJS 应用程序中有一些事件监听器代码,它将应用于所有 Controller 的范围。

我基本上想在某处定义以下内容:

    document.addEventListener("online", onOnline, false);
    document.addEventListener("offline", onOffline, false);

    function onOnline() {
        console.log("just got online event");
        $scope.noNetwork = false;
    }

    function onOffline() {
        console.log("just got offline event");
        $scope.noNetwork = true;
    }

无论哪个 Controller 作用域当前处于事件状态,它都将接收事件。

最佳答案

尝试$rootScope:

var app = angular.module("yourModule",[]);
app.run(function($rootScope){
   document.addEventListener("online", onOnline, false);
   document.addEventListener("offline", onOffline, false);

   function onOnline() {
        $rootScope.$apply(function(){
            console.log("just got online event");
            $rootScope.noNetwork = false;
        });
    }

    function onOffline() {
        $rootScope.$apply(function(){
             console.log("just got offline event");
             $rootScope.noNetwork = true;
        });
    }
});

由于作用域继承,$rootScope 的属性将被所有子作用域继承。请注意,此事件发生在 Angular 之外,在这种情况下也需要使用 $apply。您的所有子作用域都可以 $watch noNetwork 更改。像这样:

$scope.$watch('noNetwork',function(newValue){
//Handle your tasks here.
});

另一种选择是创建一个服务来保存 noNetwork 属性并将该服务注入(inject)到您的 Controller 中。

关于javascript - 我应该将事件监听器代码放在所有 Controller 都使用的 AngularJS 中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21451054/

相关文章:

JavaScript - 当这些值相同时,如何使用 print 函数输出存储在数组中的 2 个值?

javascript - 如何将位置按钮设置为底部?

javascript - 使用 $scope 变量自动设置字段 - AngularJS

javascript - 两个指令之间的 Angular 指令范围共享

javascript - 逗号分隔数组的重复检查

Javascript 或 HTML5 检索本地 ip

javascript - Angular UI 路由器状态导航

javascript - 在另一个 Controller 中使用来自一个 Controller 的数据

javascript - 如何在 javascript 中的单个警报消息中显示表单值

javascript - angularjs 验证输入并在无效时防止更改