2015-10-05 3 views
0

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

В настоящее время у меня есть настраиваемая директива, которая загружает список комментариев в системе. Список комментариев - это настраиваемая директива, которая загружает список через вызов ресурса и показывает список. Это отлично работает на странице A.

На странице В показан один пользователь через URL-адрес. например site.com/user/3 - это загружается как ресурс REST в качестве модели страницы. Это также отлично работает.

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

Этот подход, похоже, не работает. Насколько я могу судить, директива применяется до того, как пользователь выполнит обещание, поэтому я заканчиваю нефильтрованные комментарии.

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

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

+0

Ваш вопрос здесь полна недоразумений (или, возможно, просто неправильно используемой терминологии), и, вероятно, будет лучше рассмотрен в обсуждении. мы можем использовать комнату [AngularJs] (http://chat.stackoverflow.com/rooms/63378/angularjs), если хотите .... – Claies

ответ

1

Я на самом деле не в пользу жестких правил, но, на мой взгляд:

  • директивы действительно для DOM манипуляции + презентации, предпочтительно в качестве самостоятельных, повторно используемых компонентов. В вашем примере ваша директива должна быть связана исключительно с пользовательским интерфейсом отображения списка комментариев.
  • Взаимодействие с сервером, фильтрация комментариев и т. Д. Должно управляться службой, которая будет зависеть от вашей директивы. Таким образом, в вашем примере у вас будет метод в службе: getUserComments = function (userID), который извлекает комментарии для этого пользователя. Директива принимает эти данные и обновляет свой раздел DOM.

Это будет выглядеть так:

angular.service('CommentService', 
    function($http, $q){ 

     this.getUserComments = function(userID){ 

      var deferred = $q.defer(); 

      $http.get('site.com/user/' + userID). 
       success(function(comments) { 

        deferred.resolve(comments) 

       }). 
       error(function(data, status) { 

        deferred.reject(status); 

       }); 

      return deferred.promise; 
     }; 

    } 
); // End CommentService 

angular.directive('commentList', 
    function(CommentService){ 

     return { 
     restrict : 'EA', 
     template : '<ul><li ng-repeat="comment in comments">{{comment.text}}</li></ul>', 
     scope : true, 
     replace : true, 
     link : function(scope, elem, attrs){ 

      // get User ID from somewhere 
      var userID = 3; 
      CommentService.getUserComments(userID).then(
       function(comments){ 
        scope.comments = comments; 
       } 
      ); 

     } 
     } 
    } 
); 

Надежда, что имеет смысл!

+0

Спасибо также Клэям, которые предоставили мне некоторое представление об исправлении моего подхода в чате сессия. Я использовал этот метод желтым цветом, и он работает. – Jason

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