[英]Why can't I display data getted with $http.get?
我尝试在api中获取数据,并在console.log中获取对象,如下所示:
Object {_id: "590c14b1bf38e524e4b1a1ca", name: "John", age: 22, __v: 0}
这是我用来获取和显示的代码。
服务器
detailRoute.route('/detail/:name')
.get(function(req,res) {
User.findOne({name:req.params.name},function(err,user) {
console.log(user);
if (err){
res.status(404).send(err);
}else{
res.status(200).json(user);
}
})
});
js:
var vm = this;
vm.dt =[];
vm.getDetail = function() {
$http.get('/api/detail/' + $stateParams.dt , $stateParams.dt)
.then(function(response) {
vm.dt = response.data;
console.log(response.data);
});
};
vm.getDetail();
HTML:
<ul ng-repeat="d in vm.dt">
<li>{{d.name}}</li>
<li>{{d.age}}</li>
</ul>
什么也没显示。 我尝试更改为
vm.dt.push(response.data)
而且有效。 所以我想问为什么我上面的代码不起作用。 感谢您的帮助
您的http
调用的输出是一个对象。 您将现有的数组引用vm.dt
覆盖为回调内的对象,然后尝试循环遍历模板内的数组。
尝试以字典方式更改ng-repeat
。
<ul ng-repeat="(key, value) in vm.dt">
<li>{{key}} {{value}}</li>
</ul>
我尝试更改为vm.dt.push(response.data)并成功。
因为以这种方式您仍然使用数组,因此ng-repeat将起作用
仅过滤姓名和年龄,您可以使用ng-if
或自定义过滤器
<ul ng-repeat="(key, value) in vm.dt" ng-if="key === 'name' || key === 'age'">
<li>{{key}} {{value}}</li>
</ul>
ng-repeat有两种选择:
如果您在ng-repeat
中使用object
则需要使用如下所示的对象:
<ul ng-repeat="(key, value) in vm.dt">
<li> {{ key }} : {{ value }}</li>
</ul>
如果您在ng-repeat
中使用array
则可以执行以下操作:
<ul ng-repeat="d in vm.dt">
<li>{{ d.name}}</li>
<li>{{ d.age}}</li>
</ul>
现在了解这里发生了什么,您正在从服务器获得响应,该服务器是一个object
并且正在将该object
分配给变量,并尝试像array
一样打印它,但不要忘记它是一个对象,因此它不会打印。
当您执行vm.dt.push(response.data)
您正在将对象推入数组中,现在您正在正确地进行操作。 因此它正在打印您的数据。
我希望这将有所帮助。
谢谢。
编辑
如果要显示特定字段,则应使用vm.dt.push(response.data)
,然后使用它
<ul ng-repeat="d in vm.dt">
<li>{{ d.name}}</li>
<li>{{ d.age}}</li>
</ul>
您可以在此代码中看到,无需过滤任何仅打印要显示的数据的内容。 因此,以我的理解,从性能的角度来看,这是很好的。
您正在使用controllerAs
synthax:。
var vm = this;
表示您应该在视图中使用控制器别名 (这并不意味着它是vm
)。
这是一个控制器别名为main
的示例:
<div ng-controller="MainCtrl as main">
<ul ng-repeat="d in main.dt">
<li>{{d.name}}</li>
<li>{{d.age}}</li>
</ul>
</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.