v-model 最好用的就是配合 data 成 Two-way Binding,但若使用 Vuex 之後,是否 能使用 v-model 搭配 state Two-way Binding 呢 ?
Version
Vue 2.5.17
Vuex 3.0.1
V-model vs. Data
HelloWorld.vue
<template> <div> <div> <input type="text" v-model="name"> </div> <div> {{ name }} </div> </div></template><script>/** data */ const data = function() { return { name: '', };};export default { name: 'HelloWorld', data,};</script>
Vue 的 v-model 法,直接 <input> 定到 name data。
Value vs. Input
但若 name data 提升到 Vuex 的 name state 之後,就 了。
Vuex 的是 Unidirection Dataflow, state 只能被 取,要 入 state 必 靠 mutation ,因此 v-model 法直接 入 state 。
v-model 本 是 value property binding input event 的 syntatic sugar,因此可以回 基本 作,使用 value input 。
HelloWorld.vue
<template> <div> <div> <input type="text" :value="name" @input="onInputName"> </div> <div> {{ name }} </div> </div></template><script>import { mapState } from 'vuex';/** computed */const computed = mapState(['name']);/** methods */const onInputName = function(e) { this.$store.commit('setName', e.target.value);};const methods = { onInputName,};export default { name: 'HelloWorld', computed, methods,};</script>
第 4 行
<input type="text" :value="name" @input="onInputName">