gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:38 25 4
gpt4 key购买 nike

我想在我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com