Angularjs Angucomplete Alt:获取;“未找到结果”;在获得服务器响应之前

Angularjs Angucomplete Alt:获取;“未找到结果”;在获得服务器响应之前,angularjs,autocomplete,Angularjs,Autocomplete,我试图在输入3个字符后启动请求,但一旦输入3个字符,我将收到“未找到记录”错误,之后我可以找到“服务调用已完成”,但“自动完成”中未显示任何内容(仅在“自动完成”下拉列表下显示错误消息)。我缺少什么 HTML代码: <angucomplete-alt id="angu_{{$index}}" placeholder="Search people"

我试图在输入3个字符后启动请求,但一旦输入3个字符,我将收到“未找到记录”错误,之后我可以找到“服务调用已完成”,但“自动完成”中未显示任何内容(仅在“自动完成”下拉列表下显示错误消息)。我缺少什么

HTML代码:

       <angucomplete-alt id="angu_{{$index}}"
                                      placeholder="Search people"
                                      remote-api-handler="search"
                                      remote-url-data-field="results"
                                      title-field="fullName"
                                      minlength="3"
                                      input-class="form-control form-control-small"
                                      selected-object="selected"
                                      selected-object-data="$index"
                                      clear-selected="true"/>
尝试了相同的另一个版本:

 <angucomplete-alt id="angu_{{$index}}" 
                   placeholder="Search people" 
                   selected-object="selectedBusiness" 
                   selected-object-data="$index"  
                   clear-selected="true" 
                   input-class="form-control 
                   form-control-small" 
                   remote-api-handler="searchAPI" 
                   remote-url-data-field="responseData.data" 
                   title-field="fullName" minlength="3" />

   $scope.searchAPI = function (userInputString, timeoutPromise) {
   $scope.approversAndEndorsersInput = {};
   return $timeout(function () {
         $scope.approversAndEndorsersInput.userId = "";
         $scope.approversAndEndorsersInput.name = userInputString;
         $scope.approversAndEndorsersInput.system = "";
         $scope.approversAndEndorsersInput.officeNumber = "";
         $scope.approversAndEndorsersInput.department= "";
         return $http.post(appConstant.selfDomainName+appConstant.getApproversAndEndorsersList, JSON.stringify($scope.approversAndEndorsersInput), {timeout: timeoutPromise});


   }, 1000);

$scope.searchAPI=函数(userInputString,timeoutPromise){
$scope.approversandorsersinput={};
返回$timeout(函数(){
$scope.approversandorsersinput.userId=“”;
$scope.ApproverSandersInput.name=userInputString;
$scope.approversandorsersinput.system=“”;
$scope.approversandorserInput.officeNumber=“”;
$scope.approversandorsersinput.department=“”;
返回$http.post(appConstant.selfDomainName+appConstant.GetApproverSandersList,JSON.stringify($scope.ApproverSandersInput),{timeout:timeoutPromise});
}, 1000);

}

根据我在您的代码和文档中看到的情况,我认为问题在于您在
searchAPI
函数中立即返回了
$timeout
的承诺,一旦达到超时,该函数就会自行解决。这就是为什么您将看到返回“未找到记录”,然后调用API的原因。相反,直接返回
$http
promise对象。i、 e:

$scope.searchAPI = function(userInputString, timeoutPromise)
{
    // do some other stuff, stringify data, build url_endpoint
    return $http.post(url_endpoint, json_data, {timeout: timeoutPromise});
}
$http
承诺只有在您的API被使用后才能解决。

第一个示例 在第一个示例中,您从未返回
承诺

var promise = genericAPIService.doApiCall(url, appConstant.POST, ...
因此,$timeout永远不会通过API的响应得到解决
在$timeout回调结束时返回
承诺

第二个例子 您似乎没有正确设置
远程url数据字段

这是我使用第二个示例附带的一个plunker,它工作正常,我稍微修改了
searchAPI
方法以显示最后一个http响应

当我错误地配置了
远程url数据字段时
,做出了响应,但结果显示为“未找到结果”

请参阅plunk上的注释,并尝试以适合您的方式对其进行配置 如果无法绑定正确的属性,请提供api中的响应示例,我们可以找到解决方案

使用$timeout 使用
$timeout
添加延迟的原因并不明显,在两个示例中都是这样做的。它所做的唯一一件事就是人为地增加给定时间量的延迟。如果原因是向触发API请求的输入字段添加一些去抖动/延迟,那么这并不会减少它

有一个
pause
属性,它可以配置以毫秒为单位的延迟,以确保在用户停止键入的这段时间之后调用api。 您可以在plunker演示中看到,默认值为500
由于您的自定义服务和$http(来自第二个示例)都返回承诺,您可以直接返回它们的结果

我能够解决问题。PFB帮助解决问题的链接


errorPayload
处理程序无法重新抛出错误时,您使用
genericAPIService
命中的REST端点是什么。然后执行链中的
块。重新抛出错误以跳过后续的
。然后
块是很重要的。@georgeawg:它根本没有进入错误处理程序。在服务调用结束之前执行Angu complete指令。。。。因为没有找到任何记录。。。这就是我想的…@bowofola:endpoint正在提供数据。。点击url后。。或者应该以其他方式给出?很难重现你看到的问题。什么是
alt
?您创建的第三方库或指令?您看到下面答案中的plunk了吗?这里描述了这一点以及如何配置alt指令,并且从您的问题中复制了方法,只更改了api调用
var promise = genericAPIService.doApiCall(url, appConstant.POST, ...