VueJS Dinamik Tablo Componenti Oluşturma

Yasin DALKILIÇ
3 min readJul 27, 2020

--

Vue JS

Herkese merhabalar,bildiğim kadarıyla sizlere vuejs ile birlikte dinamik bir tablo componenti nasıl yapabiliriz onu anlatmaya çalışacağım.

Proje Oluşturma

vue create router-app

ardından terminal ekranında npm run serve diyerek projeyi ayağa kaldırıyoruz.

Tabloya harici stil yazmak yerine,Bootstrap kütüphanesini projeye dahil ediyoruz.

Bootstrap’ın projeye dahil edilmesi

Projemin içinde public/index.html aşağıdaki gibi bootstrapi dahil ediyoruz.

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

ardından components klasörü içinde yeni bir src/components/table.vue

yeni bir component oluşturuyoruz.

Propsların Belirlenmesi

rows: Tabloüzerinde göstereceğimiz verilerin listesi.

columns:Tablo üzerindeki başlıklar için.

actionsButtonsVisible:Tablo üzerinde işlem yapmak için gerekli butonların gösterilip gösterilmeyeceği.

deleteButtonVisible:Tablo üzerinde sil butonunun gösterilip gösterilmeyeceği.

updateButtonVisible:Tablo üzerinde güncelle butonunun gösterilip gösterilmeyeceği.

props:{
rows:{
type:Array,
required:true
},
columns:{
type:Array,
required:true
},
deleteButtonVisible:{
type:Boolean,
required:false
},
actionsButtonsVisible:{
type:Boolean,
required:false
},
updateButtonVisible:{
type:Boolean,
required:false
},
}

Methodların Belirlenmesi

deleteButtonClick:Sil butonuna basıldığında çağırılmış olduğu bir üst componente tıklanan veriyi ve ilgili index numarasını verme işlemi.

updateButtonClick: Güncelle butonuna basıldığında çağırılmış olduğu bir üst componente tıklanan veriyi ve ilgili index numarasını verme işlemi.

methods:{
deleteButtonClick(item,index){
this.$emit('deleteButtonClick',{item,index})
},
updateButtonClick(item,index){
this.$emit('updateButtonClick',{item,index})
}
},

Tablonun oluşturulması

Aşağıda yapılan işlemler kısaca şu şekilde;

Tablo başlıklarını render etmek için props olarak gelen verinin üzerinde v-for ile döngü kuralarak label özelliğinin yazdırılması.Ve işlemler için (Sil,Güncelle vb..) bir sutun oluşturulması props olarak işlemler için true değer geçilirse gösterilmesi için v-if ile kontrol edilmiştir

Ardından props olarak gelen veri üzerinde v-for ile döngü kuralarak ilgili satırların oluşturulması sağlanıyor,props olarak gelen sutunların içersindeki value bilgisi ile veri üzerindeki özellkler çağırılarak ilgili elementin içinde gösteriliyor, sil ve güncelle butonları için bir sutun oluşturulup işlemler için geçilen props true değeri taşırsa,ardından sil ve güncelle butonları için gelecek props değerlerine bakılarak gösterilip gösterilmeyeceğine karar veriliyor. Tablonun en altında ise tablodaki toplam veri sayısı eğer gelen veri sıfırdan büyük ise gösteriliyor değil ise kayıt bulunamadı ifadesi yazdırılıyor.

<table class="table table-striped">
<thead>
<tr>
<th v-for="(title,i) in columns" :key="i">{{title.label}}</th>
<th v-if="actionsButtonsVisible">İşlemler</th>
</tr>
</thead>
<tbody>
<tr v-for="(row,i) in rows" :key="i">
<td v-for="(column,i) in columns" :key="i">
<p>{{row[column.value]}}</p>
</td>
<td>
<div class="float-right">
<button class="btn btn-sm btn-outline-danger" v-if="deleteButtonVisible" @click="deleteButtonClick(row,i)">Sil</button>
<button class="ml-2 btn btn-sm btn-outline-warning" @click="updateButtonClick(row,i)" v-if="updateButtonVisible">Güncelle</button>
</div>

</td>
</tr>
</tbody>
<tfoot>
<p class="mt-2">Toplam Kayıt Sayısı : {{rows.length>0 ? rows.length:'Kayıt Bulunamadı'}}</p>
</tfoot>
</table>

Componentin Kullanımı

İlgili componentimizi src/App.vue dosyasına import ediyoruz.

ve ilgili props değerlerini aşağıdaki gibi geçiyoruz.

<template>
<custom-table :rows="tableData"
@updateButtonClick="updateHandler($event)"
@deleteButtonClick="deleteHandler($event)"
:update-button-visible="true"
:delete-button-visible="true"
:actionsButtonsVisible="true"
:columns="tableColumns"> </custom-table>
</template>

<script>
import CustomTable from './components/table.vue'
export default {
name: 'App',
data(){
return{
tableData:[{id:1,ad:'yasin',soyad:'dalkılıç',tc:11111,telefon:2222},
{id:2, ad:'rümeysa',soyad:'dalkılıç',tc:11111,telefon:2222}],
tableColumns:[{label:'Kullanıcı Adı',value:'ad'}, {label:'Kullanıcı Soyadı',value:'soyad'},{label:'Kullanıcı TC NO',value:'tc'}],
}
},
methods:{
deleteHandler(data){
console.log('delete',data)
},
updateHandler(data){
console.log('update',data)
}
},
components: {
CustomTable
}
}
</script>

ve artık bize özel bir tablomuz var dilersek daha fazla özelleştirme yapabiliriz.

Herkese İyi Çalışmalar Dilerim :)

--

--

Yasin DALKILIÇ
Yasin DALKILIÇ

Written by Yasin DALKILIÇ

Hi, My name is Yasin I am a Software Developer, I love so much researching and development 😊 Here is my youtube channel @webciyasin

No responses yet