-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.js
134 lines (116 loc) · 4.03 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// Ubah URL dibawah sesuai endpoint project Anda
axios.defaults.baseURL = 'http://localhost:8000'
// Siapkan route components disini
// - Route: LihatUser
const LihatUser = {
template: '#lihat-user',
// Guard beforeRouteEnter() selalu dipanggil sebelum route diakses.
// Kita bisa memakainya untuk me-reset nilai data user.
beforeRouteEnter(to, from, next) {
next(vm => {
vm.$root.user = { nama: '', email: '', alamat: '' }
})
},
}
// - Route: TambahUser
const TambahUser = {
template: '#tambah-user',
}
// - Route: UbahUser
const UbahUser = {
template: '#ubah-user',
// Kita pakai guard ini untuk memanggil ambilUser() ketika route diakses,
// agar data user bisa terisi sesuai dengan id user yang disertakan
beforeRouteEnter(to, from, next) {
next(vm => {
vm.$root.ambilUser(to.params.id_user)
})
},
}
// Mulai Vue App
const app = new Vue({
el: '#app',
data: {
users: [],
user: { nama: '', email: '', alamat: '' },
message: '',
},
// Routing memakai Vue Router
router: new VueRouter({
// Routes yang dipakai bisa didefinisikan disini
routes: [
{ path: '/', component: LihatUser, name: 'lihat-user' },
{ path: '/user/tambah', component: TambahUser, name: 'tambah-user' },
{ path: '/user/:id_user/ubah', component: UbahUser, name: 'ubah-user' },
]
}),
// Methods yang nantinya dipakai berulang bisa didefinisikan disini
methods: {
// Ambil semua data user dari API server
ambilSemuaUser() {
axios.get('/user.php')
.then(response => {
this.users = response.data
})
},
// Ambil data user berdasarkan ID
ambilUser(userId) {
// Cukup pakai method find() yang tersedia untuk array
this.user = this.users.find(function (item) { return item.id == userId })
},
// Tambahkan user baru ke API server
tambahUser() {
axios.post('/user.php', this.user)
.then(response => {
// Set pesan sesuai respon dari API server
this.message = response.data.message
// Tambahkan data user yang baru ke this.users
this.users.push(this.user)
// Redirect kembali ke lihat-user
this.$router.push({ name: 'lihat-user' })
})
},
// Tambahkan user baru ke API server
ubahUser(userId) {
axios.patch('/user.php?id=' + userId, this.user)
.then(response => {
// Set pesan sesuai respon dari API server
this.message = response.data.message
// Ambil indeks dari user dengan id bersangkutan dari
// this.users, untuk dipakai dalam method splice()
// untuk menindih data user di this.users
var i = this.users.findIndex(function (item) { return item.id == userId })
// Tindih data user lama dengan data yang baru. Indeks
// yang diambil sebelumnya dipakai sebagai parameter
// pertama dalam method splice()
this.users.splice(i, 1, this.user)
// Redirect kembali ke lihat-user
this.$router.push({ name: 'lihat-user' })
})
},
// Tambahkan user baru ke API server
hapusUser(userId) {
if (confirm('Yakin ingin menghapus data user ini?')) {
axios.delete('/user.php?id=' + userId)
.then(response => {
// Set pesan sesuai respon dari API server
this.message = response.data.message
// Ambil indeks dari user dengan id bersangkutan dari
// this.users, untuk dipakai dalam method splice()
// untuk menghapus data user dari this.users
var i = this.users.findIndex(function (item) { return item.id == userId })
// Hapus data user lama. splice() tetap digunakan,
// namun tanpa parameter ketiga karena
// tidak ada pergantian data
this.users.splice(i, 1)
})
}
}
},
// Hook created() akan dijalankan ketika Vue selesai dinisialisasi.
// Kita bisa gunakan hook ini untuk memanggil
// ambilSemuaUser() untuk pertama kali
created() {
this.ambilSemuaUser()
}
})