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 相关文章推荐
判断用户的在线状态 onbeforeunload事件
Mar 05 Javascript
动态改变div的z-index属性的简单实例
Aug 08 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
基于JavaScript的操作系统你听说过吗?
Jan 28 Javascript
connection reset by peer问题总结及解决方案
Oct 21 Javascript
JS中判断null的方法分析
Nov 21 Javascript
javascript中递归的两种写法
Jan 17 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
Feb 22 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
原生js实现简单的模态框示例
Sep 08 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
Dec 19 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魔术方法__GET、__SET使用实例
2014/11/25 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
Python中的条件判断语句基础学习教程
2016/02/07 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
创业者是否需要商业计划书?
2014/02/07 职场文书
《凡卡》教学反思
2014/04/09 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript