Angularjs md项目未在md自动完成角度材质中正确更新建议列表
我使用的是md autocomplete,因为md items没有正确更新从服务主机-Ajax调用获得的响应列表 HTML源代码Angularjs md项目未在md自动完成角度材质中正确更新建议列表,angularjs,json,ajax,angular-material,Angularjs,Json,Ajax,Angular Material,我使用的是md autocomplete,因为md items没有正确更新从服务主机-Ajax调用获得的响应列表 HTML源代码 <md-autocomplete flex required md-input-name="autocompleteField" md-no-cache="true" md-input-minlength="3" md-input-maxlength="18" md-selected-item="SelectedItem"
<md-autocomplete flex required
md-input-name="autocompleteField"
md-no-cache="true"
md-input-minlength="3"
md-input-maxlength="18"
md-selected-item="SelectedItem"
md-search-text="searchText"
md-items="item in querySearch(searchText)"
md-item-text="item.DisplayName" Placeholder="Enter ID" style="height:38px !important;">
<md-item-template>
<span class="item-title">
<span md-highlight-text="searchText" md-highlight-flags="^i"> {{item.ID}} </span>
<span> - </span>
<span md-highlight-text="searchText" md-highlight-flags="^i"> {{item.Description}} </span>
</span>
</md-item-template>
</md-autocomplete>
我正在从服务主机获取自动完成列表。我得到了正确的响应,但它没有在UI中正确更新
屏幕截图1:
这里我正在搜索8224,但它显示了822的结果。我在Firebug中调试了这个问题,参见上面显示的屏幕截图,请求是针对搜索词8224发送的,我得到了两个匹配项作为JSON对象的响应,如下面的屏幕截图2所示
在UI中,它显示结果82232、82247、82248、82270。但实际上服务返回是82247和82248
如何在UI中更新角材质md自动完成的项目源?请帮助我
支持性问题发布在以下链接中根据要求,以下帖子中标记的答案是正确的。
- .then()-promise API的全部功能,但稍显冗长
- .success()-不返回承诺,但提供更方便的语法
不要使用.success(),使用.then在UI中获取更新的结果…well。。是的,
searchAutocomplete
是异步的,因此在searchAutocomplete
完成之前返回存储在$scope.iList
中的值querySearch
在第一次运行时返回未定义数组或空数组,然后在第二次运行时,它将显示第一次运行的值,因为此时它已完成,因此将更新$scope.iList
。我建议找到一种不直接在视图中使用queryResult的方法,而是让视图查看范围变量,例如,“iList中的项”
(尽管这本身并不能完全解决这个问题,但在searchText更改时,您仍然必须以某种方式调用queryResult)@KevinB我发布了一个问题——在那里我使用了你所说的方法,但我仍然面临这个问题。所以,我在谷歌上搜索了很多,发现一篇帖子,他们建议$scope.$apply,但是$scope.$apply会引起一个错误。如果我使用直接赋值,那么它会给出与本文相同的输出。否则,函数将在收到回调之前返回。@SambhavSharma我试过了。但它也提供相同的输出。
//bind the autocomplete list when text change
function querySearch(query) {
var results = [];
$scope.searchText = $scope.searchText.trim();
if (query.length >=3) {
results = LoadAutocomplete(query);
}
return results;
}
//load the list from the service call
function LoadCPTAutocomplete(id) {
TestCalculatorService.searchAutocomplete(id).then(function (result) {
if (result.data != null) {
$scope.iList = result.data;
} else {
$scope.iList = [];
}
});
return $scope.iList;
}