У меня есть функция, которая помогает фильтровать данные. Я использую, v-on:change
когда пользователь изменяет выбор, но мне также нужно, чтобы функция вызывалась еще до того, как пользователь выберет данные. Я проделал то же самое с AngularJS
предыдущим использованием, ng-init
но понимаю, что такой директивы нет вvue.js
Это моя функция:
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)
});
}
В blade
файле я использую блейд-формы для выполнения фильтров:
<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>
Это отлично работает, когда я выбираю конкретный элемент. Затем, если я нажму на все, скажем all floors
, это сработает. Что мне нужно, так это когда страница загружается, она вызывает getUnits
метод, который будет выполнять $http.post
с пустым вводом. В бэкэнде я обработал запрос таким образом, что если вход пуст, он предоставит все данные.
Как я могу это сделать vuejs2
?
Мой код: http://jsfiddle.net/q83bnLrx
источник
Вам нужно сделать что-то вроде этого (если вы хотите вызвать метод при загрузке страницы):
new Vue({ // ... methods:{ getUnits: function() {...} }, created: function(){ this.getUnits() } });
источник
created
вместо этого.вы также можете сделать это, используя
mounted
https://vuejs.org/v2/guide/migration.html#ready-replaced
.... methods:{ getUnits: function() {...} }, mounted: function(){ this.$nextTick(this.getUnits) } ....
источник
Помните, что когда
mounted
событие запускается для компонента, еще не все компоненты Vue заменены, поэтому DOM может еще не быть окончательным.Чтобы действительно имитировать
onload
событие DOM , то есть запускать после того, как DOM будет готов, но до того, как страница будет отрисована, используйте vm. $ NextTick изнутриmounted
:mounted: function () { this.$nextTick(function () { // Will be executed when the DOM is ready }) }
источник
Если вы получаете данные в массиве, вы можете сделать как показано ниже. Это сработало для меня
<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>
источник