AngularJS typeahead throws' undefined'不是一个对象(评估' c.length')

时间:2014-05-04 22:41:05

标签: javascript angularjs angular-ui-bootstrap

过去一天我一直在努力解决这个问题,尽管看起来每个人都有这个工作,但我一直都会遇到这个错误:

Error: 'undefined' is not an object (evaluating 'c.length') 

以下是我的HTML:

<input ng-model="customerQuery" 
       type="text" 
       typeahead="suggestion for suggestion in searchCustomers($viewValue)"                
       typeahead-editable="false"
       typeahead-on-select="addCustomerToInvoice($item)"
       typeahead-min-length="3"  
       class="form-control"/>

这是我的服务:

getCustomers: function(formData) {
  return $http({
      url: '/api/sales/searchCustomer',
      data: {name: formData},
      method: 'POST',
      header: {'Content-Type':'application/json'}
  });
}

最后这是我的控制器:

$scope.searchCustomers = function(customer) {
    SalesService.getCustomers(customer)
    .then(
      function(response) {
        if (response.data.message) {
          console.log(response.data.message);
        }
        else {
          return limitToFilter(response.data, 10);
        }

      },
      function(response) {
        console.log(response.data);
      }
    );
};

提前谢谢

1 个答案:

答案 0 :(得分:0)

如果没有正在运行的重现场景,很难确定,但有一件事显然是错误的,那就是您没有从控制器中的searchCustomers返回服务调用的结果。它应该是这样的:

$scope.searchCustomers = function(customer) {
    return SalesService.getCustomers(customer)
    .then(
      function(response) {
        if (response.data.message) {
          console.log(response.data.message);
        }
        else {
          return limitToFilter(response.data, 10);
        }

      },
      function(response) {
        console.log(response.data);
      }
    );
};

除了这个遗漏之外,可能还有更多内容,因此如果此修复后仍有任何问题,请发送重现方案。