Я прочитал много статей, постов и вопросов в StackOverflow и других, но не получил ответа. Я реализую простой компонент комментариев и ответов для моего проекта Laravel.
* У меня есть таблица, как показано ниже: *
id | name | body | reply_id | status
---------------------------------------------------------
1 | bran | good | null | accepted
2 | sansa | awe full article | 1 | accepted
3 | jan | soo Cool | 1 | accepted
4 | nightK | dont post it again| Null | accepted
5 | kalici | wow nice | Null | accepted
6 | worm | why ?? | 4 | accepted
Если response_id подано Нуль я получаю его как основной комментарий не как ответ комментария
в моем vuejs mount () я получу все комментарии со значением Null reply_id и принятые администратором из метода, названного getComments (), и вызову его в mount ().
также я использую паравинацию Laravel
мои getComments, как показано ниже код Vue:
getComments(page = 1) {
var self = this;
axios.get('/comment/pagination/+post_id+ '?page=' + page)
.then(function(response) {
self.comments = response.data;
});
и показать его с метками html и vuejs:
<div v-for="comment in comments.data" :key="comment.id" class="comments">
<div class="media comment" v-if="comment.reply==null">
<img src="/images/avar.png" width="50px" height="50px" alt="image">
<div class="media-body">
<h6 v-if="comment.user"> {{ comment.user['f_name'] }} {{ comment.user['l_name'] }} </h6>
<h6 v-if="!comment.user">{{ comment.name }}</h6>
<ul class="list-inline">
<li class="list-inline-item"><span class="fa fa-calendar"></span>{{ comment.created_at }}</li>
<li class="list-inline-item"><a href="#">Reply</a></li>
</ul>
<p>
{{ comment.body }}
</p>
</div>
</div>
<hr>
</div>
пока здесь мой компонент не работает хорошо. показывает только основные комментарии.
![image of main comments](https://i.stack.imgur.com/5t2Cj.png)
теперь пришло время загружать ответы основных комментариев.
я использую метод с именем getReplies :
getReplies(MainCommentId) {
console.log(MainCommentId);
var self = this;
axios.get('/comment/replies/' + MainCommentId)
.then(function(response) {
console.log(response.data.data);
self.replies = response.data.data;
});
},
и затем я изменил свой основной вид комментария ниже:
<div v-for="comment in comments.data" :key="comment.id" class="comments">
<div class="media comment">
<img src="/images/avar.png" width="50px" height="50px" alt="image">
<div class="media-body">
<h6 v-if="comment.user"> {{ comment.user['f_name'] }} {{ comment.user['l_name'] }} </h6>
<h6 v-if="!comment.user">{{ comment.name }}</h6>
<ul class="list-inline">
<li class="list-inline-item"><span class="fa fa-calendar"></span>{{ comment.created_at }}</li>
<li class="list-inline-item"><a href="#">Reply</a></li>
</ul>
<p>
{{ comment.body }}
</p>
<!-- Nested Comment -->
{{ getReplies(comment.id) }}
<div v-for="reply in replies" :key="reply.id" class="media comment">
<img src="/images/avar.png" width="50px" height="50px" alt="image">
<div class="media-body">
<h6 v-if="reply.user"> {{ reply.user['f_name'] }} {{ reply.user['l_name'] }} </h6>
<h6 v-if="!reply.user">{{ reply.name }}</h6>
<ul class="list-inline">
<li class="list-inline-item"><span class="fa fa-calendar"></span>{{ reply.created_at }}</li>
<li class="list-inline-item"><a href="#">Reply</a></li>
</ul>
<p>
{{ reply.body }}
</p>
</div>
</div>
</div>
</div>
<hr>
</div>
но когда он хочет получать ответы по методу на каждом шаге v-для основных комментариев, он будет непрерывно отправлять запрос и данные об изменениях в части ответа HTML. это действует как сумасшедший как изображение ниже.
![enter image description here](https://i.stack.imgur.com/VQJsi.gif)
любая помощь будет оценена.