J'ai une fonction qui aide à filtrer les données. J'utilise v-on:change
lorsqu'un utilisateur modifie la sélection, mais j'ai également besoin que la fonction soit appelée avant même que l'utilisateur ne sélectionne les données. J'ai déjà fait la même chose avec AngularJS
auparavant en utilisant ng-init
mais je comprends qu'il n'y a pas de directive de ce type dans vue.js
Ceci est ma fonction:
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)
});
}
Dans le fichier blade
, j'utilise des formes de lame pour effectuer les filtres:
<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>
Cela fonctionne bien lorsque je sélectionne un élément spécifique. Ensuite, si je clique sur tous, disons all floors
, cela fonctionne. Ce dont j'ai besoin, c'est quand la page est chargée, elle appelle la méthode getUnits
qui exécutera le $http.post
avec une entrée vide. Dans le backend, j'ai traité la demande de manière à ce que si l'entrée est vide, toutes les données seront données.
Comment puis-je faire cela dans vuejs2
?
Mon code: http://jsfiddle.net/q83bnLrx
Vous pouvez appeler cette fonction dans la section beforeMount d'un composant Vue: comme suit:
....
methods:{
getUnits: function() {...}
},
beforeMount(){
this.getUnits()
},
......
Le violon en marche: https://jsfiddle.net/q83bnLrx/1/
Il existe différents crochets de cycle de vie Vue fournissant:
J'ai énuméré quelques-uns sont:
vm.$el
nouvellement créé.Vous pouvez consulter la liste complète ici .
Vous pouvez choisir le hook qui vous convient le mieux et le raccrocher pour vous appeler, comme dans l'exemple de code fourni ci-dessus.
Vous devez faire quelque chose comme ceci (si vous voulez appeler la méthode au chargement de la page):
new Vue({
// ...
methods:{
getUnits: function() {...}
},
created: function(){
this.getUnits()
}
});
vous pouvez aussi le faire en utilisant mounted
https://vuejs.org/v2/guide/migration.html#ready-replaced
....
methods:{
getUnits: function() {...}
},
mounted: function(){
this.$nextTick(this.getUnits)
}
....
Notez que lorsque l'événement mounted
est déclenché sur un composant, tous les composants Vue ne sont pas encore remplacés. Le DOM peut donc ne pas être encore définitif.
Pour vraiment simuler l’événement DOM onload
, c’est-à-dire s’il doit être déclenché une fois que le DOM est prêt mais avant que la page ne soit dessinée, utilisez vm. $ NextTick de l'intérieur mounted
:
mounted: function () {
this.$nextTick(function () {
// Will be executed when the DOM is ready
})
}