控制器中的角度去抖(非输入)

时间:2014-07-02 07:06:41

标签: javascript angularjs debouncing

我有一个网站,我需要在点击事件上获得一些去抖功能,我搜索网络找到一个合适的解决方案,但一直无法。

我有两个链接,每个链接都有自己的数据类型,这些数据用在下面的列表中。

<li ng-class="{'active' : type == 'own'}">
    <a ng-click="changeType('own')" href="#"><span aria-hidden="true" class="icon icon-user"></span> Mine arbejdsgrupper</a>
</li>
<li ng-class="{'active' : type == 'all'}">
    <a ng-click="changeType('all')" href="#"><span aria-hidden="true" class="icon icon-cabinet"></span> Foreslåede arbejsgrupper</a>
</li>

如果我快速切换,(单击第一个,然后是第二个)异步提取以获取数据无法跟随,那么我从列表中的第一个链接获取内容,即使我先点击第二个链接。

我可以看到有一个ng-model-options,但我无法弄清楚我是否可以在这里。 如果我需要使用下划线去抖,我会很难过,所以我需要$ scope。$将每个更改应用到范围。

任何人都有这方面的想法吗?

EDIT!

朋友送我这个。 How to write a debounce service in AngularJS 它应该解决问题。

1 个答案:

答案 0 :(得分:0)

你在错误的层面上考虑这个问题。根据经验,我认为UI应该只有简单的交互,主要只是函数调用,即我尝试限制UI中的表达式和逻辑。

所以在点击这些方法后,我会在控制器中去抖。

angular.module('app-controlllers').controller('ACtrl', [
'$scope',
function ($scope) {
    var debounceAllFn = _.debouce(function () {
        // your actual function implementation
    }. 500),
    debounceOwnFn = _.debouce(function () {
        // your actual function implementation
    }. 500);

    $scope.changeType = function (type) {
        switch (type.toLowerCase()) {
            'all' : 
                debounceAllFn();
                break;
            'own' : 
                debounceOwnFn();
                break;
        }
    }
}
]);