用Vuex商店绑定UI元素
问题描述:
我试图用Vuex商店绑定UI元素(单行文本框或“输入”元素)。 This fiddle has the code.用Vuex商店绑定UI元素
当SearchResult
组件可见时,它会自动更新 - 请参阅下面的GIF,其中输入Lisp
或Prolog
。这不是我想要发生的事情。我真正想要做的是从模型状态中分离出 UI状态(即文本框的值),这样如果我键入Lisp
并按搜索,SearchResult
组件会自行更新。
理想情况下,我想文本框带有可变这是在店里不绑定,还添加一些代码来改变观察到店里,让店里的任何变化都反映在UI。
我读了Vuex的forms handling documentation,但对于完成这件事的最佳方式并不十分清楚。请任何人都可以帮忙?我是SPA新手,所以我确信有一个更好的方法来完成这项工作。
答
我认为你已经使用的方法是一般的方法,如果你想在input
使用储存变量。 (为什么?)既然你要分离与模型的状态UI变量,你可以做到以下几点:
- 有在VUE instace一个局部变量
- 使用与V-模型局部变量
- 在状态变量上放置一个监视,如果状态变量改变,则改变局部变量。按下按钮
- 设置状态变量,或像
onblur
事件
这里一些其他的方式是相关的JS变化:
const app = new Vue({
router,
el: '#app',
data: {
localQuery: ''
},
computed: {
query: {
get() { return store.state.query },
set (v) { store.commit('setquery', v) }
}
},
methods: {
s1: function() {
console.log('app.s1 this.query: ' + this.query);
this.query = this.localQuery
router.push({ name: 'qpath', params: { query: this.query }});
}
},
watch:{
query: function (newVal) {
this.localQuery = newVal
}
}
})
看到更新的小提琴here。
也许OP正在考虑一些昂贵的搜索,如远程搜索与服务器,然后是* debounce *的时间... ... –
潘俊杰是正确的,我希望在文本框中建立一个预测自动完成功能。你关于防脱的意见非常有帮助,现在我正在阅读。 – sigint
setter不应该派遣一个动作而不是提交? – Despertaweb