На самом деле, когда вы удаляете второй элемент, значение для третьего элемента устанавливается снова. Таким образом, обработчик значения watcher выполняется. В вашем обработчике вы пытаетесь установить значение с помощью jQuery:
watch: {
value: function (value) {
// update value
$(this.$el).val(value)
},...
Но это не работает, потому что это действие не вызывает событие change
. Таким образом, Vue не отображает никаких изменений.
Чтобы исправить это, запустите явное событие change
:
watch: {
value: function (value) {
// update value
$(this.$el).val(value).trigger('change')
},...
Я также заметил в вашей демонстрации, что ваши элементы select
не инициализированы правильно,Вы передаете:
mySelects: [
{label: 'first', val: 1},
{label: 'second', val: 2},
{label: 'third', val: 3}
],...
Итак, в первом select
должно быть выбрано значение 1, во втором - значение 2 и т. Д.
Есть два шага, чтобы исправить это:
- явное событие триггера
change
после установки значения - установки значения после передачи параметров
mounted: function () {
var vm = this
$(this.$el)
// first pass the options
.select2({ data: this.options })
// and then set the value
.val(this.value)
// trigger change event explicitly to let Vue know that it has to update DOM
.trigger('change')
// emit event on change.
.on('change', function () {
vm.$emit('input', this.value)
})
},