@lolrofl01

Почему vue watch не работает?

Не уверен, что делаю правильно, но задача стоит такая. Есть инпут, по нажатию на который всплывает календарь - соответственно выбираешь дату, и она меняется в инпуте. Изначально дата стоит - сегодняшний день. Реализация на vue. Календарь, так уж вышло - jquery datepicker.
var today = moment().format('DD.MM.YYYY');

var app = new Vue({
    el: '#wrapper',
    data: {
        theDate: today
    },
    watch: {
        'theDate' : function(value) {
            alert(value);
        }
    }
});


input:
<input v-model="theDate" type="text" id="theDate">

Вызов календаря:
$('#dateStart').datepicker({
        autoClose: true,
        onSelect: function() {
            $('#dateStart').trigger('change');
        }
    });

В результате, в инпуте сегодняшняя дата - все работает. Если нажать на инпут - вылезает календарь. Выбираю любое значение из календаря - в инпуте все меняется, но во vue переменной theDate - все остается по-прежнему без изменений. Vue просто не видит никаких изменений в инпуте, хотя они есть. Я даже искуственно добавил trigger('change') и все равно нет эффекта. В то же время код:
$(document).on('change', '#theDate', function() {
   alert('ok');
});

Срабатывает на отлично.

Задача простая. Изначально в инпуте должна стоять текущая дата, и все расчеты производятся с учетом нее. Если же пользователь выбрал другую дату - то расчеты должны начинаться с этой другой даты. А в моем случае получается, что выбрал что-то юзер или не выбрал - все равно в переменной vue (theDate) лежит сегодняшняя дата без изменений.
  • Вопрос задан
  • 1309 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Во-первых, событие должно быть input, а не change. Во-вторых, нативные события, и события, которые генерирует jquery (на них vue, очевидно, плевать) - это не одно и то же. Так что

$('#dateStart').trigger('change');

следует заменить на что-то вроде

this.dispatchEvent(new Event('input'));

UPD. Пара примеров того, как это может выглядеть:

раз - с использованием jquery-ui datepicker
два - с использованием air-datepicker.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы