Praktikum 5

Latihan 1

Handling Submit Form dan Validation

 <!DOCTYPE html>  
 <html>  
 <script type="text/javascript" src="lib/vue.js"></script>  
 <style>  
   body {  
     font-style: normal;  
     font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;  
   }  
   input[type=text],  
   select {  
     width: 100%;  
     padding: 12px 20px;  
     margin: 8px 0;  
     display: inline-block;  
     border: 1px solid #ccc;  
     border-radius: 4px;  
     box-sizing: border-box;  
   }  
   textarea {  
     width: 100%;  
     padding: 12px 20px;  
     margin: 8px 0;  
     display: inline-block;  
     border: 1px solid #ccc;  
     border-radius: 4px;  
     box-sizing: border-box;  
   }  
   input[type=submit] {  
     width: 100%;  
     background-color: tomato;  
     color: white;  
     padding: 14px 20px;  
     margin: 8px 0;  
     border: none;  
     border-radius: 4px;  
     cursor: pointer;  
   }  
   input[type=submit]:hover {  
     background-color: coral;  
   }  
   .form {  
     width: 70%;  
     border-radius: 5px;  
     background-color: lightsalmon;  
     padding: 20px;  
     margin-left: 180px;  
     color: whitesmoke;  
   }  
   label {  
     text-align: left;  
   }  
 </style>  
 <body>  
   <h3>Data Produk</h3>  
   <div id="app">  
     <div class="form">  
       <form ref="formBaju" @submit.prevent="submitForm($event)" action="" method="post" id="myForm">  
         <p v-if="errors.length">  
           <b>Please correct the following error(s):</b>  
           <ul>  
             <li v-for="error in errors">{{ error }}</li>  
           </ul>  
         </p>  
         <label>Nama Produk</label>  
         <input type="text" placeholder="Masukan Nama Produk.." v-model="produk" ref="produk" />  
         <label>Kategori</label>  
         <input type="text" placeholder="Masukan Kategori.." v-model="kategori" ref="kategori" />  
         <label>Deskripsi</label>  
         <textarea v-model="description" placeholder="Masukan Deskripsi.." ref="description"></textarea>  
         <label>Harga</label>  
         <input type="text" placeholder="Masukan harga.." v-model="harga" ref="harga" />  
         <label>Foto Produk</label><br>  
         <input name="image" ref="image" type="file">  
         <input type="submit" value="Submit">  
       </form>  
     </div>  
   </div>  
   <script type="text/javascript">  
     var vm = new Vue({  
       el: '#app',  
       data: {  
         produk: '',  
         kategori: '',  
         description: '',  
         harga: '',  
         errors: []  
       },  
       methods: {  
         submitForm(event) {  
           this.errors = []  
           if (this.produk.length < 3) {  
             this.errors.push('Produk minimal 3 karakter!')  
             this.$refs.produk.select()  
           }  
           if (this.kategori.length < 3) {  
             this.errors.push('Kategori minimal 3 karakter!')  
             this.$refs.kategori.select()  
           }  
           if (this.description.length > 500) {  
             this.errors.push('Deskripsi max 500 karakter')  
             this.$refs.description.select()  
           }  
           if (this.produk.length < 0) {  
             this.errors.push('Harga tidak boleh minus')  
             this.$refs.harga.select()  
           }  
           if (this.errors.length === 0) {  
             let formDate = new FormData()  
             let image = this.$refs.image.file[0]  
             formDate.append('produk', this.produk)  
             formDate.append('kategori', this.kategori)  
             formDate.append('description', this.description)  
             formDate.append('harga', this.harga)  
             formDate.append("image", image)  
             let xhttp = new XMLHttpRequest()  
             xhttp.onreadystatechange = function() {  
               if (this.readyState == 4 && this.status == 200) {  
                 console.log(this.responseText)  
               }  
             }  
             xhttp.open("POST", "http://localhost/vue/proses.php", true)  
             xhttp.send(formDate)  
           }  
         }  
       }  
     })  
   </script>  
 </body>  
 </html>  

Hasilnya






Latihan 2

Filtering Data List

 <html>  
 <head>  
   <meta name="viewport" content="width=device-width, initial-scale=1">  
   <title>Latihan Soal No 2</title>  
   <script type="text/javascript" src="lib/vue.js"></script>  
   <style>  
     body,  
     html {  
       height: 100%;  
       margin: 0;  
       font: 400 15px/1.8 "Lato", sans-serif;  
       color: #777;  
     }  
     .header {  
       border: 2px solid #ccc;  
       background-color: #eee;  
       border-radius: 5px;  
       margin: 16px 0;  
       margin-top: 0;  
       font-size: 65px;  
       text-align: center;  
       margin-bottom: 0;  
     }  
     .topnav {  
       overflow: hidden;  
       background-color: #eee;  
       margin-top: 0;  
     }  
     .topnav a {  
       float: left;  
       display: block;  
       color: black;  
       text-align: center;  
       padding: 14px 16px;  
       text-decoration: none;  
       font-size: 17px;  
     }  
     .topnav a:hover {  
       background-color: #ddd;  
       color: black;  
     }  
     .topnav a.active {  
       background-color: violet;  
       color: white;  
     }  
     .topnav input[type=text] {  
       float: right;  
       padding: 6px;  
       margin-top: 8px;  
       margin-right: 16px;  
       border: none;  
       font-size: 17px;  
     }  
     @media screen and (max-width: 600px) {  
       .topnav a,  
       .topnav input[type=text] {  
         float: none;  
         display: block;  
         text-align: left;  
         width: 100%;  
         margin: 0;  
         padding: 14px;  
       }  
       .topnav input[type=text] {  
         border: 1px solid #ccc;  
       }  
     }  
     .card {  
       box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);  
       transition: 0.3s;  
       width: 25%;  
       padding: 10px;  
       margin-left: 70px;  
       margin-top: 20px;  
       float: left;  
     }  
     .container {  
       padding: 2px 16px;  
     }  
     .containerimg {  
       position: relative;  
       width: 100%;  
     }  
     .image {  
       opacity: 1;  
       display: block;  
       width: 40%;  
       height: auto;  
       transition: .5s ease;  
       backface-visibility: hidden;  
     }  
   </style>  
 </head>  
 <body>  
   <div class="header">  
     <p>Belanja.com</p>  
   </div>  
   <div id="app">  
     <div class="topnav">  
       <a class="active" href="#home">Home</a>  
       <a href="#about">About</a>  
       <a href="#contact">Contact</a>  
       <input type="text" v-model="keyword" placeholder="Search..">  
     </div>  
     <div class="card" v-for="(baju, index) of filterBajus" :key="index">  
       <div class=" containerimg ">  
         <img style="width: 100% " :src="baju.image " class="image " />  
       </div>  
       <div class="container ">  
         <h4><b>{{ baju.produk }}</b></h4>  
         <p>Kategori : {{ baju.kategori }}</p>  
         <p>IDR {{ baju.harga }}</p>  
         <p>Deskripsi : {{ baju.description }}</p>  
       </div>  
     </div>  
   </div>  
   <script type="text/javascript ">  
     var vm = new Vue({  
       el: '#app',  
       data: {  
         keyword: '',  
         bajus: [{  
           id: 1,  
           produk: 'Switter G.A.P',  
           kategori: 'Switter',  
           description: 'Warna pink cerah, bahan switter lembut',  
           harga: '50.000',  
           image: 'baju1.jpg'  
         }, {  
           id: 2,  
           produk: 'Kaos Batik',  
           kategori: 'Kaos',  
           description: 'Kaos pola batik, bahan katun nyaman tidak bikin panas',  
           harga: '50.000',  
           image: 'baju2.jpg'  
         }, {  
           id: 3,  
           produk: 'Kaos Belle',  
           kategori: 'Kaos',  
           description: 'Kaos pola gambar princess Belle, bahan nyaman',  
           harga: '50.000',  
           image: 'baju3.jpg'  
         }, {  
           id: 4,  
           produk: 'Kaos Garis',  
           kategori: 'Kaos',  
           description: 'Kaos pola garis-garis warna hitam abu, bahan katun.',  
           harga: '50.000',  
           image: 'baju4.jpg'  
         }, {  
           id: 5,  
           produk: 'Kaos Polos',  
           kategori: 'Kaos',  
           description: 'Kaos polos warna abu muda, saku disamping kanan kiri, bahan nyaman',  
           harga: '50.000',  
           image: 'baju5.jpg'  
         }, {  
           id: 1,  
           produk: 'Dress Kaos Pelangi',  
           kategori: 'Dress Kaos',  
           description: 'Dress rok bahan kaos nyaman warna-warni cerah',  
           harga: '50.000',  
           image: 'baju6.jpg'  
         }]  
       },  
       computed: {  
         filterBajus() {  
           return this.bajus.filter((baju) => {  
             return bajus.produk.includes(this.keyword)  
           })  
         }  
       }  
     })  
   </script>  
 </body>  
 </html>  
 ​  

Hasilnya

Komentar

Postingan Populer