【发布时间】:2015-11-17 09:35:49
【问题描述】:
我正在使用 angular-formly 和集成的 ui bootstrap typeahead 来通过服务查询 api。承诺已正确解决,但 typeaheads 列表仅显示经过的输入查询的数据。
简单示例:我输入:“Bern”,服务触发四个请求:
- query_term=B
- query_term=Be
- query_term=Ber
- 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