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 相关文章推荐
对YUI扩展的Gird组件 Part-1
Mar 10 Javascript
Jquery实现自定义弹窗示例
Mar 12 Javascript
Jquery实现的角色左右选择特效
May 21 Javascript
jquery模拟进度条实现方法
Aug 03 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
微信小程序动态的加载数据实例代码
Apr 14 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 jQuery
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
js函数柯里化的方法和作用实例分析
Apr 11 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
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
python实现数据分析与建模
2019/07/11 Python
Python argparse模块应用实例解析
2019/11/15 Python
Python Django搭建网站流程图解
2020/06/13 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
python RSA加密的示例
2020/12/09 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
甜品店创业计划书
2014/08/14 职场文书
房屋过户委托书范本
2014/10/07 职场文书
党员检讨书范文
2014/12/27 职场文书
谢师宴答谢词
2015/01/05 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript
海弦WR-800F
2022/04/05 无线电