【发布时间】:2015-02-10 07:53:57
【问题描述】:
我似乎在使用 JSON 数据填充 AngularJS 中的选择元素时遇到了一些问题。
代码:
/* the API returns: {"id":3,"name":"Some Address"} */
app.service("addressService", function($http, $q) {
var deferred = $q.defer();
$http.get('/index.php/Pro/getAddresses').then(function(data) {
deferred.resolve(data);
});
this.getCounties = function() {
return deferred.promise;
};
});
app.controller('homeController', function($scope, $http, addressService, $routeParams) {
$scope.availableCounties = {};
var promise = addressService.getCounties();
promise.then(function(data) {
$scope.availableCounties = data;
});
});
<select name="sender_address_id" ng-model="sender_address_id" ng-options="county.id as county.name for county in availableCounties">
</select>
当我查看页面时,选择字段仍未填充。我也可以控制 API。如果有比 json_encode() 更好的函数或方法,也能解决问题。
编辑,控制台输出如下:
对象{数据:对象,状态:200,标题:函数,配置:对象,状态文本:“OK”} 配置:对象 数据:对象 编号:3 名称:“某个地址” __proto__: 对象 标题:函数 (c){a||(a=Xc(b));return c?(c=a[Q(c)],void 0===c&&(c=null),c):a}状态:200 状态文本:“确定” __proto__: 对象【问题讨论】:
-
如果您在视图中记录
{{availableCounties}}是否为空? -
在你的 promise 中分配给 availableCounties 时,数据实际上是什么样子的?它可能需要一个对象数组才能让“in availableCounties”处理您的 ng-options 声明
-
更新了问题。 :|
-
嗯,好的,它的可读性不太好,但我已经看到响应中有其他命名属性,如 status 和 statusText,这意味着仅分配“数据”不会从您的承诺中起作用。 then() 中传递的参数是整个响应对象,因此它类似于 response.data 来实际访问数据数组以分配给您的范围变量。
-
对不起。我试图让它尽可能可读。将 availableCounties 分配给 data.data 似乎可以解决问题。谢谢。