2014-09-23 116 views
1

我试图使用Angular-UI Bootstrap Typeahead从远程服务器搜索名称。

输入搜索字段的实现如下。

<input type="text" ng-model="selectedName" typeahead="name for name in search($viewValue)" class="form-control"> 

和等效的控制器代码如下。

$scope.search = function (term) { 
       return $http({ 
        method: 'GET', 
        url: 'names/search.json', 
        params: { 
         q: term 
        } 
       }).then(function (response) { 
        var names = []; 
        for (var i = 0; i < response.data.length; i++) { 
         names.push(response.data[i]); 
        } 
        return names; 
       }); 
      }; 

目前,它是通过使用$http

我试图使用Restangular服务器通信工作的罚款。

我试着改变上面的控制器代码如下,但它不起作用。

$scope.search = function(term) { 
       return Restangular.all('users').one('search').getList({q:term}).then(
        function(names) { 
         return names.plain(); 
        } 
       )  
      }; 

有了上面的实现,从服务器的响应是细如预期,但[object Object]在下拉列表中,而不是名称所示。

如何将以上$http请求转换为使用Restangular

+0

Angular-UI Bootstrap Typeahead链接未打开。 – 2014-09-23 06:57:04

+0

@Prashant修复了链接。但是TypeAhead指令必须手动搜索。 – TheKojuEffect 2014-09-23 07:14:46

回答

0

增强的承诺 -

$对象:这将返回引用一旦服务器响应的值将充满 的对象。这意味着如果您调用getList ,默认情况下这将是一个空数组。一旦数组从服务器返回 ,这个相同的$对象属性将被填充来自服务器的 结果。

Restangular.all("filter").getList().$object 
+0

这不起作用。 :( – TheKojuEffect 2014-09-23 07:39:27

+0

不需要.then()部分......并保持简单...这是一个承诺......不要让函数返回任何东西......只要将其设置为一个范围变量并将其用于ng-model。 – Avik 2014-09-23 08:23:04

+1

在ng模型中的设置是我通常做的,但typeahead取决于promise中的例子。 – TheKojuEffect 2014-09-23 09:20:28