角度资源不能填补范围

时间:2014-10-28 13:38:23

标签: angularjs angularjs-scope angular-resource

我有一个简单的控制器,服务作为依赖。一旦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>

1 个答案:

答案 0 :(得分:0)

我认为数据需要应用和消化,因为服务功能不属于控制器范围。

在控制台中,在console.log之前或之后,运行$scope.$apply()

如果$ apply或$ digest已在进行中,那么您可以使用延迟为0的setTimeout包装$scope.$apply(),或者可以使用$scope.$evalAsync()包装它。