Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs md项目未在md自动完成角度材质中正确更新建议列表_Angularjs_Json_Ajax_Angular Material - Fatal编程技术网

Angularjs md项目未在md自动完成角度材质中正确更新建议列表

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,因为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-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;
}