Tutorial Laravel 8 dan Vue Js 3 #5: Menampilkan Data di Vue Js


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com

Halo teman-teman semuanya, di artikel sebelumnya kita semua telah banyak belajar tentang installasi dan konfigurasi library pendukung, seperti vue router, axiso dan lain-lain. Pada artikel kali ini kita semua akan belajar menampilkan data dari RESTful API di Vue Js menggunakan Composition API.

Langkah - Menampilkan Data Post

Sekarang, kita akan melakukan perubahan kode yang ada di dalam view/component post index. SIlahkan buka file src/views/post/Index.vue kemudian ubah semua kode-nya menjadi seperti berikut ini :

<template>
    <div class="container mt-5">
        <div class="row">
            <div class="col-md-12">
                <div class="card border-0 rounded shadow">
                    <div class="card-body">
                        <h4>DATA POST</h4>
                        <hr>
                        <router-link :to="{name: 'post.create'}" class="btn btn-md btn-success">TAMBAH POST</router-link>

                        <table class="table table-striped table-bordered mt-4">
                            <thead class="thead-dark">
                                <tr>
                                    <th scope="col">TITLE</th>
                                    <th scope="col">CONTENT</th>
                                    <th scope="col">OPTIONS</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr v-for="(post, index) in posts" :key="index">
                                    <td>{{ post.title }}</td>
                                    <td>{{ post.content }}</td>
                                    <td class="text-center">
                                        <router-link :to="{name: 'post.edit', params:{id: post.id }}" class="btn btn-sm btn-primary mr-1">EDIT</router-link>
                                        <button class="btn btn-sm btn-danger ml-1">DELETE</button>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
import axios from 'axios'
import { onMounted, ref } from 'vue'

export default {

    setup() {

        //reactive state
        let posts = ref([])

        //mounted
        onMounted(() => {

            //get API from Laravel Backend
            axios.get('http://localhost:8000/api/post')
            .then(response => {
              
              //assign state posts with response data
              posts.value = response.data.data

            }).catch(error => {
                console.log(error.response.data)
            })

        })

        //return
        return {
            posts
        }

    }

}
</script>

<style>
    body{
        background: lightgray;
    }
</style>

Di atas, pertama kita import library axios, ini akan kita gunakan untuk melakukan HTTP request ke server untuk mendapatkan data posts.

import axios from 'axios'

Kemudian, kita import hook onMounted dan reactivity ref dari Vue.

import { onMounted, ref } from 'vue'

onMounted sama dengan mounted, yaitu salah satu lifecycle hook yang ada di dalam Vue, karena kita menggunakan Composition API, maka kita tambahkan on di depannya.

kemudian untuk ref merupakan fitur baru di Vue 3 yaitu Reactivity API, dimana digunakan untuk membuat sebuah variable menjadi reaktif, dan ref biasanya digunakan untuk penggunaan data primitif, seperti String, Boolean, Integer dan lain-lain. .

kemudian, untuk mendeklarasikan component menggunakan Composition API, kita gunakan function setup, dimana semua kode akan di letakkan di dalam function tersebut.

setup() {

	// ...

}

Dan, di dalam function setup kita buat sebuah state dengan nama posts dan kita set menjadi reactive.

//reactive state
let posts = ref([])

CATATAN:

Jika menggunakan reactivity API ref di dalam function setup, maka untuk set dan get data menggunakan single objek .value.

Tapi untuk menampilkan di template kita tidak perlu menggunakan .value.

Setelah itu, di dalam hook onMounted kita melakukan request ke server API Laravel menggunakan axios, kemudian setelah data berhasil di dapatkan, maka akan di assign ke dalam state posts di atas.

//mounted
onMounted(() => {

  //get API from Laravel Backend
  axios.get('http://localhost:8000/api/post')
  .then(response => {
              
      //assign state posts with response data
      posts.value = response.data.data

  }).catch(error => {
      console.log(error.response.data)
  })

})

Di atas, bisa teman-teman perhatikan, kita set state posts dengan hasil response yang di dapatkan dari RESTful API Laravel, dan untuk set state tersebut kita menggunakan single objek .value.

//assign state posts with response data
posts.value = response.data.data

Setelah itu kita return state kita di atas, di dalam Composition API semua function dan method harus melakukan return agar dapat di di baca di dalam template.

//return
return {
  posts,
}

Kemudian, untuk menampilkan di template, kita menggunakan perulangan dengan directive v-for.

<tr v-for="(post, index) in posts" :key="index">
    <td>{{ post.title }}</td>
    <td>{{ post.content }}</td>
    <td class="text-center">
      <router-link :to="{name: 'post.edit', params:{id: post.id }}" class="btn btn-sm btn-primary mr-1">EDIT</router-link>
      <button class="btn btn-sm btn-danger ml-1">DELETE</button>
    </td>
</tr>

Di atas, kita melakukan perulangan dari state posts, kemudian kita juga membuat sebuah link untuk edit data post, dimana kita panggil nama route dan kita tambahkan parameter id dari post tersebut.

<router-link :to="{name: 'post.edit', params:{id: post.id }}" class="btn btn-sm btn-primary mr-1">EDIT</router-link>

Dan untuk button DELETE, akan kita bahas di akhir seri tutorial ini.

Di dalam template kita juga menambahkan 1 button di atas, yang digunakan untuk mengarahkan kita ke dalam form create data post.

<router-link :to="{name: 'post.create'}" class="btn btn-md btn-success">TAMBAH POST</router-link>

Di atas, kita panggil sebuah router dengan nama post.create, yang sebelumnya sudah kita buat di dalam routes.

Langkah 2 - Uji Coba Project

Sekarang kita bisa mencoba menjalankan projecr-nya, silahkan buka di http://localhost:8080, jika berhasil, maka kita akan mendapatkan tampilan seperti berikut ini :

Di atas, kita sudah berhasil menampilkan data post dari RESTful API, karena kita belum mempunyai data apapun maka tidak ada data yang ditampilkan, di artikel selanjutnya kita semua akan belajar membuat proses input data ke dalam database melalui Vue Js dan RESTful API.

Terima Kasih.


EBOOK - Membangun Website Sekolah Degan Laravel dan Vue Js : https://santrikoding.com/ebook/laravel-vue

EBOOK - Membangun Toko Online dengan Laravel dan Livewire : https://santrikoding.com/ebook/toko-online-laravel-livewire


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com
KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

KOMENTAR