2017-06-13 60 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