Angularjs директивы и концепции ресурсов

0

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

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

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

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

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

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

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

  • 0
    Ваш вопрос здесь полон недопонимания (или, возможно, просто неправильно используемой терминологии), и, вероятно, его лучше обсудить в ходе обсуждения. мы можем использовать комнату AngularJs, если хотите ....
Теги:

1 ответ

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
    Также спасибо Клэйсу, который дал мне некоторое представление о том, как исправить мой подход в чате. Я использовал этот метод от yellowmelon, и он работает лакомство /.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню