0

所以我试图通过调用 webapi 来自动完成,它正在工作/返回正确的数据,但是 md-autocomplete 总是显示上一次 webapi 调用的结果,而不是最近一次调用的结果。所以当用户输入两个字符时,自动完成下拉菜单不会加载,但我会看到 webapi 成功返回结果。然后当用户输入第三个字符时,它将显示调用 webapi 时的结果,其中包含两个字符。似乎在加载数据之前返回了 return vm.vendorResults 。我究竟做错了什么?谢谢!

<div ng-cloak="">
    <label for="usr">Manufacturer</label>
    <md-autocomplete ng-disabled="false"
                     md-no-cache="true"
                     md-selected-item="vm.selectedVendor"
                     md-search-text="vm.vendorSearchString"
                     md-items="vendor in vm.getVendorList2(vm.vendorSearchString)"
                     md-item-text="vendor.ve_name"
                     md-min-length="2"
                     placeholder="Select Manufacturer">
    <md-item-template>
        <span md-highlight-text="vm.vendorSearchString" md-highlight-flags="^i">{{vendor.ve_name}}</span>
    </md-item-template>
</div>

vm.getVendorList2 = function (vendorSearchText) {
    console.log('calling getvendorlist2');
    var jsonCatalogInfo = vm.cataloginfoVL();
    jsonCatalogInfo.ve_name = vendorSearchText;
    console.log(vendorSearchText);
    $.get(vm.memportalUrl + "securewebapi/GetVendorList/?jsonCatalogInfo=" + JSON.stringify(jsonCatalogInfo))
    .then(function (result) {
        console.log('success calling GetVendorList');            
        var jsonResult = JSON.parse(result);
        vm.vendorResults = JSON.parse(jsonResult);
        console.log(vm.vendorResults);
        return vm.vendorResults;
    });
}
4

1 回答 1

0

我通过将方法更改为同步来修复它,但我不确定这是否是可接受的修复?

 $.ajax({
        url: vm.memportalUrl + "securewebapi/GetVendorList/?jsonCatalogInfo=" + JSON.stringify(jsonCatalogInfo),
        success: function (result) {
            console.log('success calling GetVendorList');
            //defer.resolve(result);
            var jsonResult = JSON.parse(result);
            vm.vendorResults = JSON.parse(jsonResult);
            console.log(vm.vendorResults);
            //return vm.vendorResults;
        },
        async: false
    });
    return vm.vendorResults;

编辑:只是想更新这个并说另一个开发人员在应用程序中包含了 angular-block-ui,这通过在每次异步调用期间阻塞整个 UI 来导致问题。

于 2017-03-03T17:04:11.037 回答