Saya memiliki fungsi yang membantu memfilter data. Saya menggunakan v-on:change
ketika pengguna mengubah pilihan tetapi saya juga membutuhkan fungsi untuk dipanggil bahkan sebelum pengguna memilih data. Saya telah melakukan hal yang sama dengan AngularJS
penggunaan sebelumnya ng-init
tetapi saya mengerti bahwa tidak ada arahan seperti itu divue.js
Inilah fungsi saya:
getUnits: function () {
var input = {block: this.block, floor: this.floor, unit_type: this.unit_type, status: this.status};
this.$http.post('/admin/units', input).then(function (response) {
console.log(response.data);
this.units = response.data;
}, function (response) {
console.log(response)
});
}
Di blade
file saya menggunakan formulir pisau untuk melakukan filter:
<div class="large-2 columns">
{!! Form::select('floor', $floors,null, ['class'=>'form-control', 'placeholder'=>'All Floors', 'v-model'=>'floor', 'v-on:change'=>'getUnits()' ]) !!}
</div>
<div class="large-3 columns">
{!! Form::select('unit_type', $unit_types,null, ['class'=>'form-control', 'placeholder'=>'All Unit Types', 'v-model'=>'unit_type', 'v-on:change'=>'getUnits()' ]) !!}
</div>
Ini berfungsi dengan baik saat saya memilih item tertentu. Kemudian jika saya mengklik semua katakanlah all floors
, itu berhasil. Yang saya butuhkan adalah ketika halaman dimuat, itu memanggil getUnits
metode yang akan melakukan $http.post
dengan input kosong. Di backend saya telah menangani permintaan dengan cara yang jika inputnya kosong maka akan memberikan semua data.
Bagaimana saya bisa melakukan ini vuejs2
?
Kode Saya: http://jsfiddle.net/q83bnLrx
sumber
Anda perlu melakukan sesuatu seperti ini (Jika Anda ingin memanggil metode saat memuat halaman):
new Vue({ // ... methods:{ getUnits: function() {...} }, created: function(){ this.getUnits() } });
sumber
created
saja.Anda juga bisa melakukan ini dengan menggunakan
mounted
https://vuejs.org/v2/guide/migration.html#ready-replaced
.... methods:{ getUnits: function() {...} }, mounted: function(){ this.$nextTick(this.getUnits) } ....
sumber
Berhati-hatilah ketika
mounted
event dijalankan pada sebuah komponen, belum semua komponen Vue diganti, jadi DOM mungkin belum final.Untuk benar-benar mensimulasikan
onload
kejadian DOM , yaitu untuk diaktifkan setelah DOM siap tetapi sebelum halaman digambar, gunakan vm. $ NextTick dari dalammounted
:mounted: function () { this.$nextTick(function () { // Will be executed when the DOM is ready }) }
sumber
Jika Anda mendapatkan data dalam bentuk array, Anda dapat melakukan seperti di bawah ini. Ini berhasil untuk saya
<template> {{ id }} </template> <script> import axios from "axios"; export default { name: 'HelloWorld', data () { return { id: "", } }, mounted() { axios({ method: "GET", "url": "https://localhost:42/api/getdata" }).then(result => { console.log(result.data[0].LoginId); this.id = result.data[0].LoginId; }, error => { console.error(error); }); }, </script>
sumber