我想在我的 Vue 应用程序中收听所有关于输入的焦点事件。为了获得当前关注的输入,我考虑将document.activeElement
属性绑定到我的应用程序组件中的计算属性,但这不是反应性的,为什么?
在数据中声明 activeElement 也不是反应式的。
观察者也一样!
让它工作的唯一方法是在输入本身的焦点/模糊事件之后简单地返回值,但这不符合我的需要。
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>
有没有办法将文档或窗口属性绑定为响应式?