2014-10-28 2 views
0

У меня есть простой контроллер с сервисом как зависимость. Я пытаюсь заполнить область, как только будет разрешено обещание resource. Когда i 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:[...]} 

Edit:

Я использую директиву, чтобы отобразить шаблон с в 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

А где же вид? особенно упоминается 'ng-repeat' – Cherniv

+0

Извините, я редактирую свой пост – Fabrizio

ответ

0

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

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

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

+0

Спасибо за ответ, но добавив' $ scope. $ apply() 'throw me this error: https://docs.angularjs.org/error/$rootScope/ inprog? p0 = $ digest, но по крайней мере теперь данные отображаются только на «угловом хромовом инспекторе» – Fabrizio

+0

. Я отредактировал ответ, чтобы решить эту проблему. – James

+0

Спасибо, но я нашел проблему, потому что по какой-то причине область действия на контроллере недоступна директиве, поэтому мне пришлось передать область как новый параметр внутри директивы – Fabrizio

Смежные вопросы