index.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <div>
  3. <section class="section">
  4. <div class="container">
  5. <h1 class="title">All Courses</h1>
  6. <div class="columns is-multiline">
  7. <!-- iterate columns with v-for and don't forget :key -->
  8. <div
  9. v-for="course in courses"
  10. :key="course._id"
  11. class="column is-one-quarter">
  12. <!-- pass a course as a prop to course-card -->
  13. <v-popover
  14. offset="16"
  15. trigger="hover"
  16. placement="right-start">
  17. <course-card :course="course"/>
  18. <template slot="popover">
  19. <course-card-tooltip
  20. :title="course.title"
  21. :subtitle="course.category.name"
  22. :description="course.subtitle"
  23. :wsl="course.wsl"
  24. />
  25. </template>
  26. </v-popover>
  27. </div>
  28. </div>
  29. </div>
  30. </section>
  31. </div>
  32. </template>
  33. <script>
  34. import CourseCard from '~/components/CourseCard'
  35. import CourseCardTooltip from '~/components/CourseCardTooltip'
  36. import { mapState } from 'vuex'
  37. export default {
  38. head: {
  39. title: 'Amazing tech courses | Nuxtjs'
  40. },
  41. components: {
  42. CourseCard, CourseCardTooltip
  43. },
  44. computed : {
  45. ...mapState({
  46. // courses: state => {
  47. // console.log('index.vue mapState')
  48. // return state.course.items
  49. // }
  50. courses : state => state.course.items
  51. })
  52. },
  53. async fetch({store}) {
  54. const result = await store.dispatch('course/fetchCourses')
  55. }
  56. }
  57. </script>
  58. <style scoped lang="scss">
  59. // Home page
  60. .links {
  61. padding-top: 15px;
  62. }
  63. </style>