【问题标题】:UI Bootstrap typeahead promise issues with angular-formlyUI Bootstrap typeahead 承诺问题与角度形式
【发布时间】:2015-11-17 09:35:49
【问题描述】:

我正在使用 angular-formly 和集成的 ui bootstrap typeahead 来通过服务查询 api。承诺已正确解决,但 typeaheads 列表仅显示经过的输入查询的数据。

简单示例:我输入:“Bern”,服务触发四个请求:

  1. query_term=B
  2. query_term=Be
  3. query_term=Ber
  4. query_term=伯尔尼

承诺以正确的顺序正确解决。但是使用来自 query_term=Ber 的数据而不是最后一个 query_term=Bern 的数据列出建议。

有什么建议吗?

这里是代码细节:

服务:

var srv = {        
        getName: function (query_term) {},        
    };

srv.getName = function (query_term) {
return $http.get(srv._baseUrl + '/locating/api/autocomplete?query_term=' + query_term)
        .then(function(res) {
            return res.data;
        }).catch(function (err) {
            console.log(err);
        });
};

return {    
        getName: function (query_term) {
            return srv.getName(query_term);
        }
};

(正式)控制器:

{
            key: '_name',
            type: 'autocompleteNoWildcard',
            templateOptions: {
                options: [],
                onChange: function ($viewValue, $scope) {                        
                    if (typeof $viewValue != 'undefined') {
                        return $scope.templateOptions.options = locationService.getName($viewValue);                            
                    };
                }
            }
        },

HTML模板:

formlyConfig.setType({
            name: 'autocompleteNoWildcard',
            template: '<input type="text" autocomplete="off" ng-model="model._name" uib-typeahead="item.label for item in to.options" typeahead-no-results="noResults" class="form-control">',
            wrapper: ['bootstrapLabel', 'bootstrapHasError'],
        });

【问题讨论】:

  • 您是说onChange 处理程序正在触发,但预输入选项没有得到更新?
  • 他们确实得到了更新,但使用了上一个查询中的数据,如上所述。
  • 所以传入onChange处理程序的数据不正确?因为这是您在 templateOptions.options 上设置的数据。
  • 确实如此,但如果我将来自locationService.getName($viewValue) 承诺的响应数据记录到控制台,数据似乎已正确传递给$scope.templateOptions.options
  • 接下来我要尝试的是暂时从等式中删除,以查看 typeahead 组件的行为是否正确。您在这里有几个级别的东西,正确的调试将要求尝试将其隔离到尽可能小的区域。这样做,让我知道会发生什么。

标签: angularjs angular-ui-bootstrap angular-formly


【解决方案1】:

当名称长到 3 个字符时,放慢速度并开始轮询。

【讨论】:

  • 虽然这可能是解决问题的宝贵提示,但答案确实需要证明解决方案。请edit 提供示例代码来说明您的意思。或者,考虑将其写为评论。
猜你喜欢
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
相关资源
最近更新 更多