2015-11-11 2 views
0

У меня есть завод, в котором у меня есть post и комментарии свойства, значения которых являются значениями моего ресурса. Но когда я пытаюсь позвонить getComment() функция все еще возвращает [];Значение настройки Angularjs в Factory из ресурса

мой завод angular.module ('flapperNews'). Завод ('PostService', [ '$ ресурсные', функция ($) {ресурс

var service = {}; 
    var postId = 0; 
    var post = {}; 
    var comments = []; 

    service.resource = function() { 
     return $resource('api/posts/:id.json', {id: "@id"}, 
     { 
      'create': { method: 'POST' }, 
      'index': { method: 'GET', isArray: true }, 
      'show': { method: 'GET', isArray: false }, 
      'update': { method: 'PUT' }, 
      'destroy': { method: 'DELETE' } 
     } 
     ); 
    }; 

    service.setPost = function(postId) { 
     this.resource().show({id: postId}, function(post) { 
      post = post; 
      comments = post.comments; 
     }); 
    }; 

    service.getComments = function() { 
     return comments; 
    }; 
    service.setPostId = function(newPostId) { 
     this.postId = newPostId; 
    }; 

    return service; 

}]); 

использование в мой контроллер

.... 
function ($scope, Post, Comment, $stateParams, formlyValidationMessages, Page,  Auth, loginForm, postService) { 

    postService.setPost($stateParams.id); 
    console.log(postService.getComments()); 
    .... 
+0

Показать код, который использует ГЭТ комментарии, это должно быть сделано только после того, как обещание решить –

+0

это показано ниже «использования в моем контроллере» –

+0

вы отладить вызов setPost? есть ли какое-либо значение в почтовых рассылках? вы ждете с «getComments» до тех пор, пока обещание не будет разрешено? –

ответ

0

ваш код асинхронный и вы пытаетесь использовать синхронно, изменения, которые функционируют в

service.setPost = function(postId) { 
     return this.resource().show({id: postId}).$promise.then(function(post) { 
      post = post; 
      comments = post.comments; 
     }); 
    }; 

и в контроллере -

postService.setPost($stateParams.id).then(function(){ 
    console.log(postService.getComments()); 
}); 

, что так оно и должно работать! , потому что мы ожидаем, что свойство комментариев будет заполнено.

удачи

+0

Хорошо, но что, если я хочу получить доступ к свойствам комментариев службы с другого контроллера? и я просто хочу использовать (postService.comments)? –

+0

Расскажите подробнее о потоке контроллеров и использовании комментариев в вашем приложении, поэтому я могу помочь вам найти решение. –

+0

У меня есть страница с сообщениями (название, контент) и комментариями. для отображения сведений о сообщении и комментариев у меня есть postCtrl и для моего (создать форму комментария) У меня есть commentCtrl. Дело в том, что когда я создаю новый комментарий в своем CommentCtrl, я хочу добавить новые созданные комментарии к уже созданному массиву комментариев, чтобы он отображался на странице. –

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