2017-06-13 84 views
0

嗨,我遵循这一指导我的项目 https://material.angularjs.org/latest/demo/autocompletehttps://www.tutorialspoint.com/angular_material/angular_material_autocomplete.htm角料自动完成增强

的例子

他们第一次加载状态搜索的状态。然后你可以搜索这个状态这是一个很好的例子。

在我的情况

怎么样,当你搜索一个名字,确实是6K名或更多,这是加载,使我的网站更慢

一个很大的问题,所以我给它一个尝试创建自己的。搜索时获得资源,这就是我出来的。

这里是我的看法(超薄格式)

div layout="row" 
    md-autocomplete md-item-text="item.name" md-selected-item-change="ctrl.selectedItemChange(item)" md-items="item in ctrl.getMatches(searchText)" md-no-cache="true" md-search-text="searchText" md-selected-item="item" md-floating-label="Client Name" flex="" 
    md-item-template 
     span md-highlight-flags="^i" md-highlight-text="searchText" 
     | {{item.name}} 

我控制器(咖啡格式)

@getMatches = (searchText) => 
    deferred = $q.defer() 
    if searchText.length >= 2 
    name = searchText 
    test = Client::Search.query {name: name}, (data) => 
     states = data.clients 
     if states.length == 0 
     name = searchText + "*" 
     test = Client::Search.query {name: name}, (data) => 
      states = data.clients 
     $timeout (=> 
     deferred.resolve states 
     return 
     ), 1000 
    deferred.promise 
    else 
    test = [] 

,当我在我的搜索获得超过2个字母我的资源将是触发,并开始搜索。我的问题,如果我搜索长词我的网络会变慢。

附加的: 当我输入每个字母时,我的服务器端会回应如果我输入uni(对于大学)单词uni将到达我的服务器端并响应等等,然后当我完成单词“大学”我有这么多的资源,使我放慢

enter image description here

enter image description here

任何想法如何能INHANCE这个多快???

+0

这个6k名字是来自服务器端吗? (数据库?) –

+0

是的,这是过程类型>生成查询如果为真>查询到api,然后将获得给定名称的ID – wiwit

+0

那么为什么你不尝试通过使用ajax调用搜索? –

回答

0

尝试使用Ajax调用从服务器端,这里

Angular Material autocomplete with $http call

+0

我的代码是完美的工作,但我想要更快,我需要增强 – wiwit

+0

是的,我知道,如果你想更快速的不要保存大量的数据在客户端,只需从服务器端实时搜索。这就是我提出这种方法的原因。当您的客户端持有大量数据时,也可以慢慢加载网站。 –

+0

好的主要问题是,当我输入每个字母时,我的服务器端会响应例如,如果我键入uni(对于大学)uni单词将到达我的服务器端并作出响应等等,然后当我完成单词“大学“我有这么多的资源,导致我减慢任何想法? – wiwit