Tenho uma função que ajuda a filtrar dados. Estou usando v-on:change
quando um usuário altera a seleção, mas também preciso que a função seja chamada antes mesmo de o usuário selecionar os dados. Eu fiz o mesmo com o AngularJS
uso anterior, ng-init
mas entendo que não existe tal diretiva emvue.js
Esta é minha função:
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)
});
}
No blade
arquivo utilizo formulários blade para realizar os filtros:
<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>
Isso funciona bem quando eu seleciono um item específico. Então, se eu clicar em todos all floors
, digamos , funciona. O que eu preciso é que quando a página for carregada, ele chame o getUnits
método que fará o $http.post
com a entrada vazia. No back-end, lidei com a solicitação de forma que, se a entrada estiver vazia, ela fornecerá todos os dados.
Como posso fazer isso vuejs2
?
Meu código: http://jsfiddle.net/q83bnLrx
fonte
Você precisa fazer algo assim (se quiser chamar o método no carregamento da página):
new Vue({ // ... methods:{ getUnits: function() {...} }, created: function(){ this.getUnits() } });
fonte
created
vez disso, tente .você também pode fazer isso usando
mounted
https://vuejs.org/v2/guide/migration.html#ready-replaced
.... methods:{ getUnits: function() {...} }, mounted: function(){ this.$nextTick(this.getUnits) } ....
fonte
Esteja ciente de que quando o
mounted
evento é disparado em um componente, nem todos os componentes do Vue são substituídos ainda, então o DOM pode não ser final ainda.Para realmente simular o
onload
evento DOM , ou seja, para disparar depois que o DOM estiver pronto, mas antes que a página seja desenhada, use vm. $ NextTick de dentromounted
:mounted: function () { this.$nextTick(function () { // Will be executed when the DOM is ready }) }
fonte
Se você obtiver dados no array, pode fazer o seguinte. Funcionou para mim
<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>
fonte