2014-12-06 50 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