Mam funkcję, która pomaga filtrować dane. Używam, v-on:change
gdy użytkownik zmienia wybór, ale potrzebuję również wywołania funkcji, nawet zanim użytkownik wybierze dane. Zrobiłem to samo z AngularJS
wcześniej korzystaniem, ng-init
ale rozumiem, że nie ma takiej dyrektywy wvue.js
To moja funkcja:
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)
});
}
W blade
pliku używam formularzy blade do wykonania filtrów:
<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>
Działa to dobrze, gdy wybieram określony element. Jeśli kliknę na wszystko, powiedzmy all floors
, że działa. To, czego potrzebuję, to kiedy strona jest ładowana, wywołuje getUnits
metodę, która wykona $http.post
z pustym wejściem. W backendzie obsłużyłem żądanie w taki sposób, że jeśli wejście jest puste, poda wszystkie dane.
Jak mogę to zrobić w vuejs2
?
Mój kod: http://jsfiddle.net/q83bnLrx
źródło
Musisz zrobić coś takiego (jeśli chcesz wywołać metodę podczas ładowania strony):
new Vue({ // ... methods:{ getUnits: function() {...} }, created: function(){ this.getUnits() } });
źródło
created
zamiast tego.możesz to również zrobić za pomocą
mounted
https://vuejs.org/v2/guide/migration.html#ready-replaced
.... methods:{ getUnits: function() {...} }, mounted: function(){ this.$nextTick(this.getUnits) } ....
źródło
Uważaj, gdy
mounted
zdarzenie zostanie uruchomione na komponencie, nie wszystkie komponenty Vue zostaną jeszcze wymienione, więc DOM może nie być jeszcze ostateczny.Aby naprawdę zasymulować
onload
zdarzenie DOM , tj . Uruchomić po tym, jak DOM jest gotowy, ale przed narysowaniem strony, użyj vm. $ NextTick od wewnątrzmounted
:mounted: function () { this.$nextTick(function () { // Will be executed when the DOM is ready }) }
źródło
Jeśli otrzymasz dane w tablicy, możesz zrobić jak poniżej. U mnie to zadziałało
<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>
źródło