Vuex 使用 v-model 配合 state的方法


Posted in Javascript onNovember 13, 2018

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 之後,就?]????瘟恕?/p>

Vuex ???的是 Unidirection Dataflow, state 只能被?取,要??入 state 必?靠 mutation ,因此 v-model ?o法直接??入 state 。

v-model 本?是 value property binding ? input event 的 syntatic sugar,因此可以回?w基本?幼鳎?褂 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">

? name ?定到 value ,? onInputName() ?定到 input event。

16 行

const computed = mapState(['name']);

? name state 建立 name computed。

19 行

const onInputName = function(e) {
 this.$store.commit('setName', e.target.value);
};

定? onInputName() ,??接收 input event,呼叫 setName mutations 修改 name state。

store.js

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

/** state */
const state = {
 name: '',
};
/** mutations */
const setName = (state, payload) => state.name = payload;
const mutations = {
 setName,
};
export default new Vuex.Store({
 strict: true,
 state,
 mutations,
});

很??实 Vuex ??法,由 setName mutation ??修改 name state。

????法?然可行,但似乎?适Я嗽? v-model 的特色,又必?走回?路使用 event

V-model vs. Computed with Setter

HelloWorld.vue

<template>
 <div>
  <div>
   <input type="text" v-model="name">
  </div>
  <div>
   {{ name }}
  </div>
 </div>
</template>
<script>
/** computed */
const name = {
 get() {
  return this.$store.state.name;
 },
 set(value) {
  this.$store.commit('setName', value);
 },
};
const computed = {
 name,
};
export default {
 name: 'HelloWorld',
 computed,
};
</script>

第 4 行

<input type="text" v-model="name">
v-model 回?砹耍???定的是 name computed,而不是 name data。

14 行

const name = {
 get() {
  return this.$store.state.name;
 },
 set(value) {
  this.$store.commit('setName', value);
 },
}

建立 name computed,?榱俗? v-model 能?作,特?e? name computed 加上 setter。

  • get() :??? name state 抓?料
  • set() :??呼叫 setName mutation ??入 state

透?有 setter 的 computed,我??就能??使用 v-model 了。

Conclusion

?然使用 value vs. input ??法也行,但 v-model vs. computed with setter ??法更??雅,???丈辖ㄗh用此

Sample Code

完整的?例可以在我的 GitHub 上找到

Reference

Vuex , Form Handling

总结

以上所述是小编给大家介绍的Vuex 使用 v-model 配合 state的方法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于jquery的表格排序
Sep 11 Javascript
图片onload事件触发问题解决方法
Jul 31 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
jQuery中 delegate使用的问题
Jul 03 Javascript
javascript实现dom元素可拖动
Mar 21 Javascript
JS组件Bootstrap导航条使用方法详解
Apr 29 Javascript
JS实现数字格式千分位相互转换方法
Aug 01 Javascript
vue component组件使用方法详解
Jul 14 Javascript
使用DataTable插件实现异步加载数据
Nov 19 Javascript
node中的session的具体使用
Sep 14 Javascript
vue 中 命名视图的用法实例详解
Aug 14 Javascript
Vue实现简单的拖拽效果
Aug 25 Javascript
vue代码分割的实现(codesplit)
Nov 13 #Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
Nov 13 #Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
Nov 13 #Javascript
checkbox在vue中的用法小结
Nov 13 #Javascript
React父子组件间的传值的方法
Nov 13 #Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
Nov 13 #Javascript
详解如何用typescript开发koa2的二三事
Nov 13 #Javascript
You might like
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
js 异步处理进度条
2010/04/01 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python列表计数及插入实例
2014/12/17 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
python 如何区分return和yield
2020/09/22 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
小学教育毕业生自荐信
2013/11/18 职场文书
幼儿园招生广告
2014/03/19 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
西游降魔篇观后感
2015/06/15 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
python playwrigh框架入门安装使用
2022/07/23 Python