Vue.js отслеживание клика вне элемента

464
08 октября 2018, 21:40

Есть следующая разметка:

<p class="row" @dblclick="changingPrice" >
    <span v-if="isChangingPrice">
        <input type="text" v-model="currentPrice" @change="changePrice" @keyup.enter="changingPrice">
    </span>
    <span v-else>{{currentPrice}} руб</span>
</p>

По умолчанию показывается цена товара. При двойном клике инициализируется changingPrice, который меняет переменную isChangingPrice = !isChangingPrice.

Таким образом, после двойного клика, я получаю возможность редактирования данного поля.

Каким образом я могу менять переменную isChangingPrice по клику ВНЕ input'a?

Answer 1

Можно использовать кастомную директиву:

Vue.directive('click-outside', {
    bind(el, binding) {
        el.addEventListener('click', e => e.stopPropagation());
        document.body.addEventListener('click', binding.value);
    },
    unbind(el, binding) {
        document.body.removeEventListener('click', binding.value);
    }
});

Использование:

<div v-click-outside="close">

Только в этом примере значением может быть только функция.

Answer 2

Нужно использовать v-model.lazy="currentPrice". lazy применяет изменения только после клика вне элемента.

READ ALSO
Кнопка со сменой фона при нажатии [закрыт]

Кнопка со сменой фона при нажатии [закрыт]

Помогите с кодомПри нажатии цвет кнопки меняется

201
Что быстрее innerHTML или createElement appendChild

Что быстрее innerHTML или createElement appendChild

если создавать очень большое дерево, то ИМХО присвоение(=) в innerHTML быстрее чем создание дерева с помощью JSа вот как быть с наращиванием (+=) ?

198
Как можно реализовать подобную вещь? (js, jQuery)

Как можно реализовать подобную вещь? (js, jQuery)

Как можно реализовать вот такую вещь?

244
Обход DOM дерева и изменение его элементов

Обход DOM дерева и изменение его элементов

Есть массив со значениями, необходимо обойти dom дерево и заполнить содержимое элементов c классом child-elem элементами из массиваПолучается...

167