Я добавляю простой комментирующий компонент в приложение angular 1. Объект, который я получаю с сервера, выглядит так:
comments":[
{"id":1,"content":"this is my first comment","approved":1,"replies":[]},
{"id":2,"content":"this is the second","approved":1,"replies":[
{"priority_id":0,"content":"content of a reply","approved":1},
{"priority_id":0,"content":"content of a second reply","approved":1}]
}
]
В данный момент я использую 2 цикла в контроллере, чтобы присвоить «ожидающее» значение каждому комментарию и ответу, получив одобрение: 0
Это выглядит так:
angular.forEach($scope.comments, function (comment) {
if (comment.approved === 0) {
comment.pending = true;
}
comment.replies = comment.replies || [];
angular.forEach(comment.replies, function (reply) {
if (reply.approved === 0) {
reply.pending = true;
}
});
});
Есть ли лучший, более короткий способ получить это? Javascript не совсем моя сильная сторона. Мне действительно нужно зациклить в контроллере? Может я могу как-то передать значение из ng-repeat? Заранее спасибо!
Благодаря Джо Я узнал лучший способ, чем зацикливание. Я отметил его ответ как решение, хотя мне пришлось немного изменить код, чтобы он работал, потому что мое приложение использует угловой 1.4, который несовместим с функциями стрелок. Вот код:
$scope.comments.map(function(comment) {
if (comment.approved === 0) {
comment.pending = true;
}
comment.replies = comment.replies || [];
comment.replies.map(function(reply){
if (reply.approved === 0) {
reply.pending = true;
}
return reply.approved;
});
return comment.approved;
});
Он не выглядит так аккуратно, как у Джо, но он все еще использует метод карты, который, как предложили Джо и Мэтью, лучше, чем зацикливание.