Я хотел бы прослушивать все события фокуса на входах в моем приложении Vue. Чтобы получить текущий фокус ввода, я подумал о привязке свойства document.activeElement
к вычисляемому свойству в моем компоненте приложения, но это не является реактивным, почему?
Объявление activeElement в данных также не является реактивным.
То же самое и для наблюдателей!
Единственный способ заставить его работать - просто вернуть значение после события focus / blur на самом входе, но это не соответствует моим потребностям.
new Vue({
el: "#app",
data: {
activeElem: document.activeElement.tagName,
realActiveElem: document.activeElement.tagName,
},
methods: {
getActiveElem() {
this.realActiveElem = document.activeElement.tagName;
}
},
computed: {
focused() {
return document.activeElement.tagName;
}
},
watch: {
activeElem(val, oldVal) {
console.log(val !== oldVal);
},
focused(val, oldVal) {
console.log(val !== oldVal);
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<h2 @focus="getActiveElem()">
Data: {{activeElem}}
</h2>
<h2>
Computed: {{focused}}
</h2>
<h2>
From function to data: {{realActiveElem}}
</h2>
<input placeholder="Focus/Blur me" id="test" @focus="getActiveElem()" @blur="getActiveElem()" />
</div>
Есть ли способ привязать свойства документа или окна как реактивные?