Tutorial CRUD CodeIgniter 4 & Vue JS #9 - Input Data di Vue Js


Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com
Tutorial CRUD CodeIgniter 4 & Vue JS #9 - Input Data di Vue Js

Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar bagaimana cara memasukkan data ke dalam database dengan Vue Js dan Restful API.

Jadi disini nanti kita akan membuat sebuah form yang mana jika form tersebut di simpan maka akan mengirimkan sebuah data ke server dengan menggunakan Restful API dan setelah itu data akan di masukkan ke dalam database. Dan kali ini kita juga akan belajar bagaimana caara membuat validation di Vue Js yang mudah di pelajari. Langsung saja.

Langkah 1 - Component Create Post

Silahkan teman-teman buka file src/components/posts/Create.vue kemudian ubah kodenya menjadi seperti berikut ini :

<template>
    <div class="posts">
        <div class="container mt-5">
            <div class="row justify-content-center">
                <div class="col-md-12">
                    <div v-if="errors.length">
                        <div v-for="error in errors" :key="error.index" class="alert alert-danger mt-1" role="alert">
                            {{ error }}
                        </div>
                    </div>
                    <div class="card">
                        <div class="card-header">
                            TAMBAH POST
                        </div>
                        <div class="card-body">
                            <form @submit.prevent="PostStore">

                                <div class="form-group">
                                    <label>TITLE</label>
                                    <input type="text" class="form-control" v-model="post.title"
                                        placeholder="Masukkan Title">
                                </div>

                                <div class="form-group">
                                    <label>KONTEN</label>
                                    <textarea class="form-control" v-model="post.content" rows="5"
                                        placeholder="Masukkan Konten"></textarea>
                                </div>
                                <button type="submit" class="btn btn-md btn-success mr-2">SIMPAN</button>
                                <button type="reset" class="btn btn-md btn-danger">RESET</button>

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

<script>
    import axios from 'axios'

    export default {
        data() {
            return {
                post: {},
                errors: []
            }
        },
        methods: {
            PostStore(e) {

                if (this.post.title && this.post.content) {

                    axios.post('http://localhost:8080/api/post', this.post)
                        .then(() => {
                            this.$router.push({
                                name: 'posts'
                            });
                        }).catch(error => {
                            console.log(error.response);
                        });
                }

                this.errors = [];

                if (!this.post.title) {
                    this.errors.push('Masukkan Title Post.');
                }

                if (!this.post.content) {
                    this.errors.push('Masukkan Konten Post.');
                }

                e.preventDefault();

            }
        }
    }
</script>

Di atas di dalam data kita membuat 2 data array yaitu post dan error, untuk post array ini akan kita gunakan directive v-model di dalam inputan agar kita dapat mendapatkan value dari inputan tersebut. Dan untuk error array ini akan kita isi dengan list error nantinya.

data() {
  return {
     post: {},
     errors: []
  }
}

Di atas pada form action kita menggunakan directive @submit dan untuk methodnya kita arahkan ke PostStore, kemudian di dalam method PostStore kita membuat sebuah kondisi. Jika inputan title dan content ada isinya maka kita akan mengirimkan data tersebut menggunakan Axios dengan method POST ke dalam Restful API, setelah data berhasil dikirim ke server kita akan di arahkan ke router yang bernama posts.

if (this.post.title && this.post.content) {

   axios.post('http://localhost:8080/api/post', this.post)
       .then(() => {
           this.$router.push({
                 name: 'posts'
           });
       }).catch(error => {
           console.log(error.response);
   });
}

Kemudian di dalam method PostStore kiita juga membuat kondisi jika title dan content tidak diisi maka kita akan push sebuah pesan ke dalam array error, kurang lebih seperti ini :

if (!this.post.title) {
  this.errors.push('Masukkan Title Post.');
}

if (!this.post.content) {
  this.errors.push('Masukkan Konten Post.');
}

Kemudian untuk menampilkan errornya teman-teman perhatikan pada template, kurang lebih seperti berikut ini :

<div v-if="errors.length">
      <div v-for="error in errors" :key="error.index" class="alert alert-danger mt-1" role="alert">
         {{ error }}
      </div>
</div>

Jadi kita cek dulu apakah array error lenght ada isinya, jika ada maka akan kita lakukan perulangan untuk error tersebut dengan directive v-for.

Langkah 2 - Menjalankan Project Vue Js

Sekarang jika kita mencoba klik button tambah post maka kurang lebih tampilannya seperti berikut ini :


Sampai disini pembahasan tentang bagaimana cara memasukkan data ke dalam database menggunakan Restful API di Vue JS.

Source Code

CodeIgniter Restful API : https://github.com/SantriKoding-com/CodeIgniter4-Restful-API

Vue Js : https://github.com/SantriKoding-com/Vue-Js-CodeIgniter

Jika ada pertanyaan silahkan teman-teman bisa bertanya melalui kolom komentar dibawah.

Terima Kasih


Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

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