将$ http请求转换为Restangular
我试图使用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
?
增强的承诺 -
$对象:这将返回引用一旦服务器响应的值将充满 的对象。这意味着如果您调用getList ,默认情况下这将是一个空数组。一旦数组从服务器返回 ,这个相同的$对象属性将被填充来自服务器的 结果。
Restangular.all("filter").getList().$object
这不起作用。 :( – TheKojuEffect 2014-09-23 07:39:27
不需要.then()部分......并保持简单...这是一个承诺......不要让函数返回任何东西......只要将其设置为一个范围变量并将其用于ng-model。 – Avik 2014-09-23 08:23:04
在ng模型中的设置是我通常做的,但typeahead取决于promise中的例子。 – TheKojuEffect 2014-09-23 09:20:28
Angular-UI Bootstrap Typeahead链接未打开。 – 2014-09-23 06:57:04
@Prashant修复了链接。但是TypeAhead指令必须手动搜索。 – TheKojuEffect 2014-09-23 07:14:46