我有一个简单的控制器,服务作为依赖。一旦resource
的承诺得到解决,我就试图填补范围。当我console.log()
范围时,它会正确显示数据范围,但我的ng-repeat不起作用。此外,我正在使用chrome
的角度扩展,并且该范围(posts)
上没有显示任何数据。我错过了什么?
控制器:
function TimelineController($scope,TimelineService)
{
$scope.posts = [];
$scope.getPosts = function(wall_type,wall_id) {
TimelineService.getPosts(wall_type,wall_id).$promise.then(function(result){
$scope.posts = result.response;
console.log($scope.posts); // it show correctly the data on console
});
}
}
服务
function TimelineService($resource) {
var resource = $resource('/timeline/:postId',
{postId:"@id"}
);
return {
getPosts: function(entity,id)
{
// /timeline?entity=user&id=3 (example url)
return resource.get({entity:entity,id:id});
}
}
};
服务器的响应是:
{success:true, response:[...]}
修改
我正在使用指令在ng-repeat
中显示模板:
function timeline() {
return {
restrict: 'E',
replace: true,
scope: {
type: '@',
ids: '@',
postime: '&'
},
templateUrl:"/js/templates/timeline/post-tmpl.html"
}
};
所以在我看来:
<div class="col-md-8" ng-controller="TimelineController">
<timeline type="user" ids="8" postime="getPosts(wall_type,wall_id)"></timeline>
</div>
我的模板的简短版本:
<ol class="timeline" ng-init="postime({wall_type:type,wall_id:ids})">
<li ng-repeat="post in posts">
{{post.poster.fullname}}
</li>
</ol>
答案 0 :(得分:0)
我认为数据需要应用和消化,因为服务功能不属于控制器范围。
在控制台中,在console.log之前或之后,运行$scope.$apply()
。
如果$ apply或$ digest已在进行中,那么您可以使用延迟为0的setTimeout包装$scope.$apply()
,或者可以使用$scope.$evalAsync()
包装它。