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中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
Jan 15 Javascript
JavaScript中的eval()函数详解
Aug 22 Javascript
使用node.js 获取客户端信息代码分享
Nov 26 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
Feb 18 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
HTML5 js实现拖拉上传文件功能
Nov 20 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 jQuery
Angular X中使用ngrx的方法详解(附源码)
Jul 10 Javascript
get  post jsonp三种数据交互形式实例详解
Aug 25 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
Jan 06 Javascript
ant design实现圈选功能
Dec 17 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下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
介绍Python中内置的itertools模块
2015/04/29 Python
Python中的rfind()方法使用详解
2015/05/19 Python
python发送HTTP请求的方法小结
2015/07/08 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python字符串对象实现原理详解
2019/07/01 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
财务学生的职业生涯发展
2014/02/11 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2014年科协工作总结
2014/12/09 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
毕业论文致谢信
2015/05/14 职场文书
课题研究阶段性总结
2015/08/13 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
Java 写一个简单的图书管理系统
2022/04/26 Java/Android