2014-12-06 85 views
5

我有一個AngularJS Typeahead以異步方式檢索匹配項。當條形碼掃描到現場時,它會返回匹配結果,但用戶仍然必須選擇它。如果它完全匹配,我想自動選擇結果。我看到typeahead有一個select(idx)函數,但不知道如何從我的控制器獲取對它的引用。以編程方式選擇AngularJS Typeahead選項

我設想是這樣的:

$scope.SearchItems = function (term) { 
    return $http.get('api/Items/Search', { 
     params: { 
      term: term 
     } 
    }).then(function (response) { 
     if (response.data.length == 1 && response.data[0].Code == term) { 
      // Somehow inform typeahead control to select response.data[0] 
     } 
     return response.data; 
    }); 
}; 
+0

請問您可以添加一個console.log(響應)並讓我知道它返回什麼? – Nicolas2bert 2015-10-09 22:13:24

+0

{ 配置:{...}, 數據:[{代碼= 「ABC」,OtherProperties =值}], 狀態:200, 狀態文本: 「OK」 } – 2015-10-11 04:28:58

回答

0

我也有類似的問題,從來沒有想出如何訪問預輸入的select(idx),但我設法讓這一功能。這裏是我的解決辦法哈克....

$promise.then(function(res) { 
angular.forEach(res, function(item, key) { 

    // if we have an exact match 
    if (item.title === term) { 
     // update model 
     $scope.src = item; 

     // find item in dropdown 
     var elm = '[id*=option-' + key + ']'; 
     var opt = angular.element(document.querySelectorAll(elm)); 

     //call click handler outside of digest loop 
     $timeout(function() { 
      opt.triggerHandler('click'); 
     }, 0); 
    } 
}); 
// return async results 
return res; 
}); 

基本上我們只是手動更新我們的模型,我們的下拉定位元素,然後關火「點擊」處理程序。確保你將triggerHandler調用的$timeout()設置爲零,否則由於摘要已在進行中,您將收到$rootScope:inprog錯誤。

+0

這將工作如果只有一個鍵入頁面上,正確的?如果您有多個,它將​​嘗試在每個預先選擇的位置上選擇該索引。 – 2015-10-11 04:24:00

+0

是的,這是正確的,但從我的理解來看,typeahead選項只有在使用typeahead時纔可見....所以如果您有多個typeahead,它只會選擇可見選項。 – accraze 2015-10-12 01:00:58

+0

你說得對。非常好,謝謝! – 2015-10-13 23:53:49