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 常见操作实现方式和常用函数方法总结
May 06 Javascript
简单的Jquery遮罩层代码实例
Nov 14 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
May 07 Javascript
详解Vue.js入门环境搭建
Mar 17 Javascript
requirejs按需加载angularjs文件实例
Jun 08 Javascript
使用angular帮你实现拖拽的示例
Jul 05 Javascript
vue resource post请求时遇到的坑
Oct 19 Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 Javascript
JS如何监听div的resize事件详解
Dec 03 Javascript
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
three.js中多线程的使用及性能测试详解
Jan 07 Javascript
js实现验证码干扰(静态)
Feb 22 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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
jquery 输入框数字限制插件
2009/11/10 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
angular多语言配置详解
2019/05/16 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
python实现感知器
2017/12/19 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
animation和transition的区别
2020/10/12 HTML / CSS
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
应届生高等护理求职信
2013/10/12 职场文书
道路建设实施方案
2014/03/18 职场文书
财务部会计岗位职责
2015/02/03 职场文书
2022年显卡天梯图(6月更新)
2022/06/17 数码科技