下划线库提供了一个反跳功能,该功能可防止在设定的时间内多次调用该功能。他们的版本使用setTimeout。
我们如何用纯AngularJS代码做到这一点?
此外,我们可以利用$ q样式的承诺在反跳周期之后从调用的函数中检索返回值吗?
这是此类服务的工作示例:http :
//plnkr.co/edit/fJwRER?p=preview。它创建了一个$q
延迟对象,该对象将在最终调用去抖动功能时解决。
每次debounce
调用该函数时,都会返回对内部函数的下一次调用的承诺。
// Create an AngularJS service called debounce
app.factory('debounce', ['$timeout','$q', function($timeout, $q) {
// The service is actually this function, which we call with the func
// that should be debounced and how long to wait in between calls
return function debounce(func, wait, immediate) {
var timeout;
// Create a deferred object that will be resolved when we need to
// actually call the func
var deferred = $q.defer();
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if(!immediate) {
deferred.resolve(func.apply(context, args));
deferred = $q.defer();
}
};
var callNow = immediate && !timeout;
if ( timeout ) {
$timeout.cancel(timeout);
}
timeout = $timeout(later, wait);
if (callNow) {
deferred.resolve(func.apply(context,args));
deferred = $q.defer();
}
return deferred.promise;
};
};
}]);
通过在promise上使用then方法,可以从去抖动的函数中获取返回值。
$scope.addMsg = function(msg) {
console.log('addMsg called with', msg);
return msg;
};
$scope.addMsgDebounced = debounce($scope.addMsg, 2000, false);
$scope.logReturn = function(msg) {
console.log('logReturn called with', msg);
var promise = $scope.addMsgDebounced(msg);
promise.then(function(msg) {
console.log('Promise resolved with', msg);
});
};
如果您logReturn
连续快速拨打了多次电话,您将看到logReturn
一遍又一遍的通话记录,但只有一个addMsg
通话记录。
问题内容: 我喜欢使用指令制作自定义组件。我检查了很多教程,它使我感到困惑,任何人都可以解释指令的工作原理。我计划制造的组件是 呼喊列表的模板将像这样 问题答案: 这是您的指令,带有一些内联注释: 和模板文件: 现在,您可以在代码中使用它,如下所示: 控制器: 视图: 希望这可以帮助!
问题内容: 我的公司拥有数千个现有的xml Web服务,并开始为新项目采用AngularJs。 http://angularjs.org/上的教程专门使用json服务。看起来他们在控制器中进行了服务调用,解析了生成的JSON,并将生成的对象直接传递给视图。 我该如何处理XML?我看到四个选项: 解析它,然后将DOM对象直接传递到UI(view)。 在服务器端围绕我的XML服务放置一个JSON包装器
问题内容: authService.getLoggedin()返回false或true取决于用户是否登录。然后,我想不允许他们进入网址,如果不允许的话。 但是我收到此错误:错误:[$ injector:modulerr]由于以下原因无法实例化模块WikiApp:[$ injector:unpr]未知提供程序:authService 问题答案: 在配置阶段,您只能要求提供程序($ routeProv
问题内容: 我需要为AngularJS编写一个自定义模块,但是我找不到关于该主题的任何好的文档。如何为AngularJS编写一个可以与他人共享的自定义模块? 问题答案: 在这种情况下,您认为文档无法再为您提供帮助,一个很好的学习方法是查看其他已经构建的模块,看看其他人是如何做到的,他们如何设计架构以及如何将它们集成到其中。他们的应用。 在查看其他人的工作之后,您至少应该有一个起点。 例如,看看任何
在vert. x中编写异步请求处理程序的推荐方法是什么? 在此服务中,请求处理通常涉及调用DB、调用外部服务等。但是,我不想阻止请求处理线程。使用vet实现这一目标的推荐方法是什么。十、在一个典型的异步处理链中,我将使用请求处理线程向带有请求对象的消息总线发出消息。另一个处理程序将选择此消息并进行一些处理,例如检查请求参数。然后,这个处理程序可以向总线发出一条新消息,下一个处理程序将执行远程调用,
问题内容: 如何在Doctrine 2.0中编写此SQL查询(并获取结果)? 问题答案: 好吧,我发现也许是最好的解决方案: 然后是两个类( NotificationGroup 和 NotificationEvent ),它们扩展了 Notification :