angularjs typeahead和async api调用问题

时间:2018-04-28 19:21:19

标签: angularjs asynchronous asp.net-web-api2 typeahead angularjs-ng-resource

我有以下实现,html:

<input id="myField" name="myField" class="form-control" type="text" placeholder="myField"
ng-model="myController.myObj.FieldValue" typeahead-editable="false" 
uib-typeahead="item as item.Description for item in myController.fieldDS($viewValue)" required>

控制器:

var vm = this;
vm.fieldDS = myService.getFieldDS;

服务:

function getFieldDS() {
return [{'Description': 'ItemA'}, {'Description': 'ItemB'}, {'Description': 'ItemC'}];
}

它工作正常。 当我试图调用远程异步api时,问题就出现了。 我使用ngResource更改了服务,并尝试使用以下功能:

function getFieldDS() {
  return Resource.query();
}

function getFieldDS() {
  var items = Resource.query();
  return items.$promise;
}

function getFieldDS() {
  var items = Resource.query();
  items.$promise.then(
     function (result, responseHeaders) {
       return result;
     },
     function (httpResponse) { console.log('failed: ' + httpResponse); }
  );
}

或控制器上的代码:

vm.fieldDS = myService.getFieldDS;

vm.fieldDS = function () {return myService.getFieldDS();};

myService.getFieldDS().then(function (result) { vm.fieldDS = result;})

在最后一种情况下,我收到关于预期函数的类型错误,也许是未找到绑定源的类型错误!?

在所有其他情况下,当我在输入字段上插入一个字符时,页面加载,api已被调用,但输入列表中没有显示任何内容。如果我尝试使用来自查询或服务的响应的console.log,则已正确获取数组。 控制器或先行输入字段似乎没有等待来自api的响应,但我不明白如何解决这个问题。 请你帮帮我吗? 非常感谢

编辑: 服务方式:

function getFieldDS() {
  var items = Resource.query();
  return items.$promise;
}

和控制器:

function getSomething() {
 var temp = myService.getFieldDS();
 temp.then(
   function(result) {
     console.log(result);
     return result;
   }
 );
 return temp;
}
vm.fieldDS = getSomething;

在控制台上打印包含所有对象的正确数组,但它们不会在typeahead字段上添加。 我找到了一些具有相同实现的示例代码,但我不明白为什么在我的情况下它不起作用。

1 个答案:

答案 0 :(得分:0)

问题解决了! 该问题与block-ui模块冲突有关。 使用autoblock = false;

配置blockUiConfig