2014-09-23 117 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