У вас есть пара незначительных проблем с файлом Vue, которые могут быть решены довольно быстро.
Во-первых, вы должны определить comments
как пустой массив - коллекция будет возвращена как массив объектовк Vue. Добавляя ненужное свойство data
в начале, вы позволяете циклу v-for
запускаться в вашем шаблоне до получения данных.
РЕДАКТИРОВАТЬ: я не уверен в том, как вы написалиэта функция данных, поэтому я переписал ее так, как мне знакомо.
data() {
return {
comments: []
}
},
Во-вторых, вы хотите получить правильные данные из ответа. Данные Axios хранятся на другом уровне (response.data
). Конечно, если вы разбиваете на страницы результаты, они еще на один уровень (response.data.data
).
fetchComments() {
axios.get(`/results/${this.post.id}`).then(response => {
this.comments = response.data
// or for paginated results
// this.comments = response.data.data
})
}
РЕДАКТИРОВАТЬ: Спасибо за предоставление Gist! Я думаю, что теперь я вижу вещи более четко.
Обновите свой контроллер следующим образом:
Вы хотите загрузить комментарии в пост здесь.
public function show(Post $post)
{
$recommended_posts = Post::latest()
->whereDate('date','>',date('Y-m-d'))
->where('category_id','=',$post->category_id)
->where('id','!=',$post->id)
->limit(7)
->get();
// load the post comments here
$post->load('comments');
$posts['particular_post'] = $post;
$posts['recommended_posts'] = $recommended_posts;
return view('posts.show',compact('posts'));
}
И вы лезете вот так:
Вашему модулю нужна отдельная запись, а не массив комментариев.
<comments-component :post="{{ $posts['particular_post'] }}"></comments-component>
А вам Vue нравится так:
Вам вообще не нужно использовать Axios, так как мы уже загрузили комментарии.
<script>
import Avatar from 'vue-avatar'
export default {
props: ['post'],
components: {
Avatar
},
data() {
return {
comments: this.post.comments
}
},
}
</script>