gpt4 book ai didi

javascript - angularjs `$digest`什么时候触发?

转载 作者:行者123 更新时间:2023-12-03 05:19:55 26 4
gpt4 key购买 nike

我正在尝试实现一个功能来检查用户的不活动情况。我的在线搜索建议我可以使用 $rootScope.$watch 来监视事件。但是,我有点担心 $digest 触发器...因为我似乎无法准确找到何时或哪些事件触发此触发器。任何指示将不胜感激。

最佳答案

在我看来,Angular 的 $digest 本身并不能解决这个需求。如果用户移动鼠标怎么办,难道不应该重新启动空闲计时器吗?

我建议创建一个指令,在 $window 对象上为 keydown 和 mousemove 创建事件监听器。然后创建一个服务,允许其他组件在用户空闲状态发生变化时接收通知。

类似这样的事情:

angular
.module('myApp', [])
.service('Idle', function(){
var self = {
callbacks: {
onidle: []
},
on: function(event, callback){
event = 'on' + event.toLowerCase();
if(self.callbacks[event] && typeof callback === 'function'){
self.callbacks[event].push(callback);
}
return this;
},
trigger: function(event){
event = 'on' + event.toLowerCase();
if(self.callbacks[event])
{
lodash.each(self.callbacks[event], function(callback){
callback.call();
});
}
return this;
}
}

return {
on: self.on,
trigger: self.trigger
}
})
.directive('idleNotification',
function(
$window,
Idle
){
return {
link: function($scope){
var timer = setTimer();

angular
.element($window)
.on('keydown mousemove', function(){
clearTimeout(timer);
timer = setTimer();
});

function setTimer(){
return setTimeout(function(){
Idle.trigger('idle');
}, 30);
}
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

然后像这样使用 Idle 服务:

Idle.on('idle', function(){
// do something here when the user becomes idle
});

关于javascript - angularjs `$digest`什么时候触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41436438/

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