我已经有一段时间没有使用AngularJS了,现在,对于某些旧项目,我必须重新开始使用它。一项要求是我必须提供自动完成功能,以下是HTML:
<md-autocomplete
ng-if="!enteredJd.id"
ng-disabled="ctrl.isDisabled" md-no-cache="ctrl.noCache"
md-selected-item="ctrl.selectedItem"
md-search-text-change="ctrl.searchTextChange(ctrl.searchText)"
md-search-text="ctrl.searchText"
md-selected-item-change="ctrl.selectedItemChange(item)"
md-items="item in ctrl.searchedCompanies"
md-item-text="item"
md-min-length="0"
placeholder="Enter hiring company name">
<md-item-template>
<span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item}}</span>
</md-item-template>
</md-autocomplete>
这是JS:
self.isDisabled = false;
self.searchedCompanies = [];
self.selectedItemChange = selectedItemChange;
self.searchTextChange = searchTextChange;
self.querySearch = querySearch;
function searchTextChange(text) {
console.log('searching:', text);
$scope.enteredJd.companyName = text;
$http.defaults.headers.post["Content-Type"] = "application/json";
var body = {
type: 'company',
term: text
};
$http.post("/api/search",body).then(function(resp) {
self.searchedCompanies = [];
resp.data.forEach(function(item){
self.searchedCompanies.push(item.standardName);
});
console.log(self.searchedCompanies)
});
}
但是当我测试它时,我发现了一些奇怪的东西。
该下拉列表仅显示以前的API响应结果,而不显示当前结果。这种行为是如此奇怪,我调试出Api响应是正确的,一旦api返回,我便将其分配给searchedCompanies,理想情况下,当我更新此变量时,下拉选项应进行相应更新,但是为什么更新时却显示以前的api响应和当前api响应会在下一个api响应期间显示吗?
感谢并希望听到您对此的分析。
我跟随了演示,似乎有这个问题:
md-items="item in ctrl.querySearch(ctrl.searchText)"
但是当我使用这个时,它从来没有到过,那是怎么回事?