我有一个AngularJS Typeahead,它可以异步检索匹配项。当条形码扫描到字段中时,它会返回匹配结果,但用户仍然必须选择它。如果结果完全匹配,我想自动选择结果。我看到typeahead有一个select(idx)函数,但我不知道如何从我的控制器中获取它的引用。
我想象的是这样的事情:
$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 :(得分:0)
我有一个类似的问题,从未想过如何访问typeahead的select(idx)
,但我设法让这个功能正常工作。这是我的hacky解决方法......
$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;
});
基本上我们只是手动更新我们的模型,在我们的下拉列表中找到元素,然后触发'click'处理程序。确保将triggerHandler
调用包裹在$timeout()
设置为零,否则您将收到$rootScope:inprog
错误,因为摘要已在进行中。