3

我在使用 Bootstrap-UI 的 typeahead 控件和动态数据(从 ajax 调用中获取的数据)时遇到问题。

我的服务中的响应看起来有点像这样[{id:1, text:'somebrand'},{id:2, text:'something'}]

HTML 如下所示:

<input type="text" ng-model="result" min-length="2" typeahead="brand.id as brand.text for brand in brands($viewValue)" style="display:block">

在我的控制器中,我检索如下内容:

$scope.brands = function(brandName){
        $http.post('/brands/getbrandsviewmodel', { query : brandName}).then(function(response){
            return limitToFilter(response.data, 15);
        });
    };

我遇到的问题是 Bootstrap-UI 中的错误,如下所示:

 Cannot read property 'length' of undefined
at http://localhost:3000/assets/ui-bootstrap-tpls-0.4.0.js?body=1:2749:24

当我调试 Bootstrap-UI 代码时,我看到这里发生了错误,并且匹配是未定义的:

//it might happen that several async queries were in progress if a user were typing fast
          //but we are interested only in responses that correspond to the current view value
          if (inputValue === modelCtrl.$viewValue) {
            if (matches.length > 0) {....

我最初的反应是 Bootstrap-UI 的 typeahead 不知道何时检索数据,但我不知道为什么,因为我使用的是 Promise?

4

1 回答 1

14

您实际上需要从您的函数中返回一个承诺。brands尝试这个:

$scope.brands = function(brandName){
       return $http.post('/brands/getbrandsviewmodel', { query : brandName})
                     .then(function(response){
                        return limitToFilter(response.data, 15);
                      });
    };
于 2013-08-02T21:04:11.300 回答