我有这个HTML div,它使用ngMouseover
指令通过函数从api获取一些数据,如下所示:
标记:
<div ng-mouseover="getData()">
</div>
控制器:
$scope.getData = function() {
//get data from api
}
有没有什么办法可以为ngMouseover
指令添加一个延迟,这样只有在光标在div上停留几秒后才会触发它?与debounce
中的ngModelOptions
一样。
答案 0 :(得分:5)
您可以使用onmouseenter
和onmouseleave
的组合:如果鼠标进入元素并且不会离开至少2秒,则进行评估。
<div debounce-mouseover="getData()" stay-at-least="2"></div>
指令debounceMouseover
是:
template: "<div ng-mouseenter="onEnter()" ng-mouseleave="onLeave()">",
link: function(scope, elem, attrs) {
var stayAtLeast = attrs.stayAtLeast;
var timer;
scope.onEnter = function() {
timer = $timeout(function() {
scope.$eval(attrs.debounceMouseover);
}, stayAtLeast);
};
scope.onLeave = function() {
$timeout.cancel(timer);
};
}
(这是一般性的想法,如果你需要帮助我会留给你实际的实施)