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 相关文章推荐
JavaScript中void(0)的具体含义解释
Feb 27 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
Mar 12 Javascript
chrome原生方法之数组
Nov 30 Javascript
JQuery选择器特辑 详细小结
May 14 Javascript
JS模式之简单的订阅者和发布者模式完整实例
Jun 30 Javascript
jQuery实现点击小图显示大图代码分享
Aug 25 Javascript
javascript简单比较日期大小的方法
Jan 05 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
Oct 27 Javascript
JS 循环li添加点击事件 (闭包的应用)
Dec 10 Javascript
使用vue.js写一个tab选项卡效果
Mar 25 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
Aug 07 Javascript
Iview Table组件中各种组件扩展的使用
Oct 20 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
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
基于jquery的Repeater实现代码
2010/07/17 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
python retrying模块的使用方法详解
2019/09/25 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
安全口号大全
2014/06/21 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
班委竞选稿范文
2015/11/21 职场文书
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL