Угловые ресурсы не заполняют область

У меня есть простой контроллер со службой в качестве зависимости. Я пытаюсь заполнить область, как только обещание 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>

person Fabrizio Fenoglio    schedule 28.10.2014    source источник
comment
А где вид? особо отметил ng-repeat   -  person Ivan Chernykh    schedule 28.10.2014
comment
Извините, я редактирую свой пост   -  person Fabrizio Fenoglio    schedule 28.10.2014


Ответы (1)


Я думаю, что данные необходимо применить и переварить, потому что функция обслуживания не является частью области действия контроллера.

В вашем контроллере до или после вашего console.log запустите файл $scope.$apply().

Если $apply или $digest уже выполняются, вы можете обернуть $scope.$apply() с помощью setTimeout с задержкой 0 или вы можете обернуть его с помощью $scope.$evalAsync().

person James    schedule 28.10.2014
comment
Спасибо за ответ, но добавление $scope.$apply() выдает мне эту ошибку: docs.angularjs .org/error/$rootScope/inprog?p0=$digest, но, по крайней мере, теперь данные отображаются только на angular chrome inspector - person Fabrizio Fenoglio; 28.10.2014
comment
Я отредактировал ответ, предоставив варианты решения этой проблемы. - person James; 28.10.2014
comment
Большое спасибо, но я обнаружил проблему, потому что по какой-то причине область действия на контроллере недоступна для директивы, поэтому мне пришлось передать область действия как новый параметр внутри директивы. - person Fabrizio Fenoglio; 28.10.2014