Я играл с angularjs и звонил в службы отдыха, чтобы показывать конкретные наборы данных, однако я борюсь с некоторыми концепциями вокруг пользовательских директив и ресурсов.
На данный момент у меня есть настраиваемая директива, которая загружает список комментариев в системе. Список комментариев - это настраиваемая директива, которая загружает список через вызов ресурса и показывает список. Это отлично работает на странице А.
На странице B я показываю одного пользователя через URL-адрес. например site.com/user/3 - это загружается как ресурс REST в качестве модели страницы. Это также отлично работает.
То, что я пытаюсь достичь, - это разместить директиву комментариев на странице пользователей, чтобы он отображал список комментариев только этим пользователем. Я работаю над тем, что могу как-то взять пользователя и как-то передать его в директиву в качестве фильтра комментариев.
Этот подход, похоже, не работает. Насколько я могу судить, директива применяется до того, как пользователь выполнит обещание, поэтому я заканчиваю нефильтрованные комментарии.
Короче говоря, как я могу получить свою директиву для загрузки отфильтрованных комментариев после завершения загрузки пользовательских данных?
Обратите внимание, что я говорю пользователям и комментариям, чтобы дать людям понять, что я пытаюсь сделать. Фактические данные более специфичны для домена, но отношения данных одинаковы. Я также специально не опубликовал код, потому что я пытаюсь понять правильный подход, который я должен принять, а не конкретную проблему с кодом.
Я не очень люблю жесткие и быстрые правила, но, на мой взгляд,
Это будет выглядеть так:
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;
}
);
}
}
}
);
Надеюсь, это имеет смысл!