使用带有api回调函数的angular-ui bootstrap typeahead

时间:2017-05-12 14:47:55

标签: javascript jquery angularjs twitter-bootstrap

我正在尝试将一个预先输入控件添加到我的项目中。我尝试使用过滤器选项,但有时,结果在数千的范围内,这会使我的应用程序的性能爬行

所以我要使用异步方法。

这里的问题是,我不能使用$ http服务来使用api,我需要使用客户专有的方法,由于授权原因并且它没有返回承诺,我需要通过成功和失败回调函数以获得结果。

这是我的先行者的结构

<div class="input-group typeahead">
                        <input type="text" class="form-control" ng-model="stopToEdit.STOP_SITE" uib-typeahead="site.SITE_CODE as site.SITE_NAME for site in sites" ng-keyup="fnGetSites(stopToEdit.STOP_SITE, stopToEdit.STOP_TYPE)"
                               typeahead-loading="loadingLocations" typeahead-no-results="noResults" typeahead-popup-template-url="siteList.html" />
                        <span class="input-group-btn">
                            <button class="btn btn-default" type="button" ng-click="fnSearchSites()"><span class="fa fa-binoculars"></span></button>
                        </span>
                    </div>

这是我为了填充网站数组而调用的方法

$scope.fnGetSites = function (val, stopType) {
        if (val === '') {
            $scope.sites = null;
            return;
        } else if (val.length < 4) {
            $scope.sites = null;
            return;
        }
        $scope.showLoadingSpinner = true;
        blockUIOnCall = false;
        customerPropietaryObject.get(<api rest url to consume>, function (results) {
            $scope.sites = results;
            $scope.$digest();
        }, $scope.fnShowErroMsg);
    }

问题是,结果存储正确,但$digest$apply都无法正常工作以显示结果。我需要进行另一个操作,例如,在文本框中编写另一个字符或激活字段blur以显示结果。

所以,如果我写'stev',我会得到结果,但在我写'steve'之前我得到'stev'的结果

知道如何解决并完成这项工作吗?

由于

1 个答案:

答案 0 :(得分:0)

好吧,经过几天的努力,专注于其他事情后,我终于决定尝试解决它。​​

最终解决方案非常简单,我只需要创建自己的承诺作为起点,并将我的客户专有方法转换为承诺,最后以

结束
var prom = new Promise(function (resolve, reject) {
            customerPropietaryObject.get(<api rest url to consume>, function (results) { resolve(results) }, function (data) { reject(data) });
        });
        return prom.then(function (results) {            
            return results;
        });

现在,我只需要弄清楚如何将数据显示为KEY | VALUE列表,因为自动填充的查询是keyvalue包含文本字段文本