Tengo una función que ayuda a filtrar datos. Estoy usando v-on:change
cuando un usuario cambia la selección, pero también necesito que se llame a la función incluso antes de que el usuario seleccione los datos. He hecho lo mismo con el AngularJS
uso anterior, ng-init
pero entiendo que no existe tal directiva envue.js
Esta es mi función:
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)
});
}
En el blade
archivo utilizo formularios de hoja para realizar los 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>
Esto funciona bien cuando selecciono un elemento específico. Entonces, si hago clic en todos all floors
, digamos , funciona. Lo que necesito es cuando se carga la página, llama al getUnits
método que realizará la $http.post
entrada vacía. En el backend, he manejado la solicitud de una manera que si la entrada está vacía, dará todos los datos.
¿Cómo puedo hacer esto vuejs2
?
Mi código: http://jsfiddle.net/q83bnLrx
fuente
Debe hacer algo como esto (si desea llamar al método al cargar la página):
new Vue({ // ... methods:{ getUnits: function() {...} }, created: function(){ this.getUnits() } });
fuente
created
lugar.también puedes hacer esto usando
mounted
https://vuejs.org/v2/guide/migration.html#ready-replaced
.... methods:{ getUnits: function() {...} }, mounted: function(){ this.$nextTick(this.getUnits) } ....
fuente
Tenga en cuenta que cuando el
mounted
evento se activa en un componente, no todos los componentes de Vue se reemplazan todavía, por lo que es posible que el DOM aún no sea definitivo.Para simular realmente el
onload
evento DOM , es decir, para disparar después de que DOM esté listo pero antes de que se dibuje la página, use vm. $ NextTick desde adentromounted
:mounted: function () { this.$nextTick(function () { // Will be executed when the DOM is ready }) }
fuente
Si obtiene datos en una matriz, puede hacer lo siguiente. Ha funcionado para mi
<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>
fuente