以编程方式选择AngularJS Typeahead选项

时间:2014-12-06 22:39:58

标签: angularjs angular-ui-typeahead

我有一个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;
    });
};

1 个答案:

答案 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错误,因为摘要已在进行中。