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 相关文章推荐
Mozilla 表达式 __noSuchMethod__
Apr 05 Javascript
js 模拟气泡屏保效果代码
Jul 10 Javascript
javascript面向对象之二 命名空间
Feb 08 Javascript
Jquery 数据选择插件Pickerbox使用介绍
Aug 24 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
javascript 闭包详解
Jul 02 Javascript
JS实现简单的二维矩阵乘积运算
Jan 26 Javascript
JavaScript+html5 canvas绘制的小人效果
Jan 27 Javascript
DropDownList实现可输入可选择(两种版本可选)
Dec 07 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
Oct 12 Javascript
js实现前端界面导航栏下拉列表
Aug 27 Javascript
原型和原型链 prototype和proto的区别详情
Nov 02 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
11个PHP 分页脚本推荐
2011/08/15 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
python生成指定尺寸缩略图的示例
2014/05/07 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
2014年安全员工作总结
2014/11/13 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
七年级语文教学反思
2016/03/03 职场文书
投资入股协议书
2016/03/22 职场文书
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技