如何延迟 AngularJS 即时搜索?

2024-03-09

我有一个似乎无法解决的性能问题。我有一个即时搜索,但它有点滞后,因为它开始搜索每个keyup().

JS:

var App = angular.module('App', []);

App.controller('DisplayController', function($scope, $http) {
$http.get('data.json').then(function(result){
    $scope.entries = result.data;
});
});

HTML:

<input id="searchText" type="search" placeholder="live search..." ng-model="searchText" />
<div class="entry" ng-repeat="entry in entries | filter:searchText">
<span>{{entry.content}}</span>
</div>

JSON 数据甚至没有那么大,只有 300KB,我认为我需要完成的是在搜索上延迟约 1 秒以等待用户完成输入,而不是在每次击键时执行操作。 AngularJS 在内部执行此操作,在阅读此处的文档和其他主题后,我找不到具体的答案。

如果有人告诉我如何延迟即时搜索,我将不胜感激。


UPDATE

现在比以往任何时候都更容易(Angular 1.3),只需在模型上添加一个去抖选项即可。

<input type="text" ng-model="searchStr" ng-model-options="{debounce: 1000}">

更新后的笨蛋:
http://plnkr.co/edit/4V13gK http://plnkr.co/edit/4V13gK

有关 ngModelOptions 的文档:
https://docs.angularjs.org/api/ng/directive/ngModelOptions https://docs.angularjs.org/api/ng/directive/ngModelOptions

旧方法:

这是另一种方法,除了角度本身之外没有任何依赖性。

您需要设置一个超时并将当前字符串与过去的版本进行比较,如果两者相同,则执行搜索。

$scope.$watch('searchStr', function (tmpStr)
{
  if (!tmpStr || tmpStr.length == 0)
    return 0;
   $timeout(function() {

    // if searchStr is still the same..
    // go ahead and retrieve the data
    if (tmpStr === $scope.searchStr)
    {
      $http.get('//echo.jsontest.com/res/'+ tmpStr).success(function(data) {
        // update the textarea
        $scope.responseData = data.res; 
      });
    }
  }, 1000);
});

这会进入你的视野:

<input type="text" data-ng-model="searchStr">

<textarea> {{responseData}} </textarea>

强制性的笨蛋:http://plnkr.co/dAPmwf http://plnkr.co/dAPmwf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何延迟 AngularJS 即时搜索? 的相关文章

  • Spring Boot 和安全性以及自定义 AngularJS 登录页面

    我正在为 Spring Security 实现一个自定义 AngularJS 登录页面 但遇到身份验证问题 遵循本教程 示例 以及他们的示例在本地运行良好 https github com dsyer spring security ang
  • Angular 1.5 组件的自定义指令

    我已经升级到 Angular 1 5 现在支持 component helper 方法致力于帮助用户过渡到 AngularJs 2 不幸的是 关于它的教程并不多 我有以下简化的自定义指令和模板 URL 谁能帮我写这个 component 形
  • 如何在打字稿中使用外部js

    我通过 Typescript 代码生成 Angular JS 代码 在一种情况下 我需要将外部 JS 文件添加到我的打字稿文件中 并且需要访问 js 文件中的类 我像这样添加js文件
  • 如何从另一个数组值中过滤数组值并返回新数组? [复制]

    这个问题在这里已经有答案了 我有两个数组 all languages and taken languages 第一个包含所有语言 例如 200 种或其他语言 第二个包含之前选择的语言 从 0 到 200 种 我需要删除所有已采用的语言 ta
  • 离子初始加载时间

    我正在使用 Ionic 构建一个简单的应用程序 但我的应用程序在冷启动时的初始加载时间方面存在性能问题 这是我所做的 collection repeat 代替带有 track by 的 ng repeat 原生滚动 overflow scr
  • 对角度“数据表”中的列进行排序

    我创建了表 table class table table striped table bordered table hover width 100 thead tr th Nannie ID th th Name th th Last n
  • 如何从 Angular 计时器获取当前时间

    我正在测试角度计时器 http siddii github io angular timer 并且发现自己想知道如何在控制器中获取当前时间 以便将其用于我可能有的任何目的 例如 我想当达到特定的分钟数时 将计时器的字体颜色设置为红色 但我完
  • PHP、in_array 和数组中的快速搜索(到最后)

    我对在数组中进行快速搜索的更好方法有疑问 我正在谈论一个特定的情况 假设我有一个数组 L A B C 当我开始时 当程序运行时 L 可能会增长 但到最后 当我进行搜索时 一个可能的原因是 L A B C D E 事实是 当我搜索时 我想要找
  • 谷歌图片搜索API

    我有一个网站 用户可以在其中提交图片 我想用这些图片自动在 Google 上进行搜索 以尽量减少图片被从其他网站盗用的可能性 我知道 Firefox 扩展 但这需要我右键单击每张图片并等待结果出现 我想自动化这个 我一直在寻找 API 但
  • Android 的互补滤波器(陀螺仪 + 加速器)

    最近我做了一些研究 使用加速度计 陀螺仪来使用这些传感器来跟踪智能手机 而无需 GPS 的帮助 请参阅这篇文章 基于陀螺仪和加速度计的室内定位系统 https stackoverflow com questions 7499959 indo
  • 如何与 ng-class 中的字符串进行比较?

    这条线似乎不适合我 Sort By a href Alphabetical a 我是否必须以某种方式转义 orderProp title 中的 title 在我的控制器中 scope orderProp title scope setOrd
  • AngularJs 表单发布数据在我的 spring 控制器中给出空值

    大家好 我正在尝试使用 Angular 发布表单 但我在 Spring 控制器中收到空值 此外 在我的控制台中 我看到 sysout 的空值 此外 即使我看到 bull 打印在我的控制台上 我也会收到错误警报 我的 JS 控制器 angul
  • ArrayList 搜索 .net

    以下是存储在我的数组列表中的数据的格式 A Amsterdam B Brussels C Canada 如此等等 我想通过仅传递前几个字符直到 来搜索我的数组列表 因此 如果我有类似 AA Test 的东西 那么我只想通过 AA 来检查它是
  • Karma 测试报告运行速度快,但实际上运行速度慢

    最好的解释是a video https youtu be Zwwi01JuPrQ 或参见下面的 gif 您会注意到 Karma 进度报告器报告测试只需要几毫秒 但显然需要相当长的时间 我在推特上提到了这一点 https twitter co
  • 如何从角度资源 $save() 读取响应并保留原始数据

    我是 Angular 的新手 我确信我在这里缺少一些基本的东西 我有一个对象 我将其发布到服务器来创建它 服务器返回对象 ID 我需要读取并更新客户端中的对象 服务器只会返回对象 ID 但是 在客户端 我有其他数据 当我执行回调时我无法使用
  • 如何在没有@Transactional的情况下使用Hibernate @Filter?

    我使用 Hibernate Filter 和 Spring Data 为项目中的每个查询添加特定的 where 子句 问题是 只要我对 findAll 方法使用 Transactional 注释 它就可以工作 有什么办法可以避免使用 Tra
  • Angularjs:当输入的字符串未找到匹配项时,在预输入中不显示搜索结果

    我正在使用 Angular UI bootstrap typeahead 我有 HTML
  • 角度剑道下拉

    我正在对许多组件使用 Angular kendo ui 但遇到了一个我似乎无法解决的问题 我有以下角度选择 它工作正常并将所选值正确绑定到 ng model
  • 如何在 Angular JS 应用程序中使用 ckeditor? [复制]

    这个问题在这里已经有答案了 我是 angularJS 新手 我需要在我的应用程序中使用 ckeditor 作为文本区域 在我在 Angular 应用程序上尝试之前 我已经完成了一个 仅 html 网页 我已经生成了我的 ckeditor 包
  • AngularJS 路由与后端路由

    我想在我的下一个项目中使用 AngularJS 该应用程序具有 Python 后端和 html5 Angular 前端 我将在后端使用 MVC 框架 但我有点困惑 我必须在后端和前端使用路由吗 因为我总是使用后端路由 而前端路由对我来说确实

随机推荐