Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.01.2021, 18:05
Кандидат Javascript-наук
Отправить личное сообщение для fori Посмотреть профиль Найти все сообщения от fori
 
Регистрация: 27.01.2021
Сообщений: 117

Vue.directive(el.addEventListener) + v-model
Здравствуйте, я столкнулся с проблемой, что в случае одновременного использования директивы вешающей слушатель и v-model — Vue.js при каждом изменении переменной заново ставит слушатель.
Пример
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<input id="vue" type="text" v-model="variable" v-my>
<script>
	Vue.directive('my', function (el) {
		el.addEventListener('input', event => {
		alert(el.value);
		}, true);
	});
	var vue = new Vue({
		el: '#vue',
		data: {
			variable: "",
		}
})
</script>

алерт должен выводится один раз, но изза того что vue ставит много слушателей со временем алертов много. Для решения можно использовать v-once, но в таком случае перестает обновлятся переменная. Можно ли поставить какой-то атрибут на v-my чтоб именно ета директива запускалась всего один раз, а переменная обновлялась...
Ответить с цитированием
  #2 (permalink)  
Старый 31.01.2021, 18:18
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

А докуменацию почитать?
В данном случае тебе, очевидно, нужен bind хук.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 31.01.2021, 18:40
Кандидат Javascript-наук
Отправить личное сообщение для fori Посмотреть профиль Найти все сообщения от fori
 
Регистрация: 27.01.2021
Сообщений: 117

Спасибо, могу ли я попросить пример как использовать bind, например в случае директив я использовал v-my, как ето будет выглядить в bind
Простите за глупые вопросы, но очень-новичкам даже документация иногда не по зубам))
Ответить с цитированием
  #4 (permalink)  
Старый 31.01.2021, 19:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

fori,

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<input id="vue" type="text" v-model="variable" v-my>
<script>
    Vue.directive('my', {
    bind:function (el) {
        el.addEventListener('input', event => {
        alert(el.value);
        }, true);
    }

    });
    var vue = new Vue({
        el: '#vue',
        data: {
            variable: "",
        }
})
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 31.01.2021, 19:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

fori,
или так локально
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<input id="vue" type="text" v-model="variable" v-my>
<script>
var vue = new Vue({
    el: '#vue',
    data: {
        variable: "",
    },
    directives: {
        my: {
            bind: function(el) {
                el.addEventListener('input', event => {
                    alert(el.value);
                }, true)
            }
        }
    }
})
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 02.02.2021, 13:54
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<input id="vue" type="text" v-model="variable">
<script>
    var vue = new Vue({
        el: '#vue',
        data: {},
        computed: {
            variable: {
                get() {
                },
                set(value) {
                    alert(value)
                }
            }
        }
    })
</script>

Почему не делать это в сетере модели ?
addEventListener здесь как костыль, (v-on:input, @input) если события нужны
Ответить с цитированием
  #7 (permalink)  
Старый 02.02.2021, 14:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Vlasenko Fedor,
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив объектов JobLack Общие вопросы Javascript 3 08.06.2017 16:14
HasMany Model skoropadas ExtJS 4 05.04.2016 13:19
как передать параметр javascript в model (asp.net mvc4 razor) Siend Общие вопросы Javascript 0 09.01.2015 14:30
json, model, treegrid - странное поведение модели svgroz ExtJS 4 16.08.2013 12:10
Component Object Model в JavaScript sionus Events/DOM/Window 1 04.02.2010 13:37