VUE使用vuex解决模块间传值问题的方法


Posted in Javascript onJune 01, 2017

在看电影、打Dota、撸代码间来回,犹豫不决,终于还是下决心继续学习VUE。

仿照 conde.js 官网写的一个demo,目前已经基本可用,但始终缺少登录页,没有用户权限管理,于是开撸......

<template>
 <div id="login">
 <c-header></c-header>
 <c-form></c-form>
 <p class="content-block"><a href="javascript:;" rel="external nofollow" rel="external nofollow" @click=showState class="button button-fill button-success">登录</a></p>
 </div>
</template>

外观大概是这样的:

VUE使用vuex解决模块间传值问题的方法

两个输入项通过 c-form 组件导入

由于没有登录接口调用,初步想法是:点击登录,将c-from组件输入的值(用户名和密码)保存在 sessionStorage 中,通过判断 sessionStorage 是否保存了用户信息,来决定用户的操作权限。

现在问题来了——点击登录,如何取得 c-form 组件中的输入值?

最直接的想法就是通过子组件派生事件,父组件监听触发。转念一想,何不使用vuex来进行管理呢?正好之前从来没有认真对待过它。

LOL......

坑坑坑,我踩踩踩

终于,总结出使用 vuex 的三大步骤:

步骤1:安装和创建

安装 vuex:npm i vuex --save

创建 store.js,把基本格式写好:

import Vue from 'vue'
 import Vuex from 'vuex'
 // 首先声明一个状态 state
 const state = {
 msg: ''
 }
 // 然后给 actions 注册一个事件处理函数,当这个函数被触发时,将状态提交到 mutaions中处理
 const actions = {
 saveName({commit}, msg) {
  commit('saveMsg', msg) // 提交到mutations中处理 
 }
 }
 // 更新状态
 const mutations = {
  saveMsg(state, msg) {
  state.msg = msg;
 }
 }
 // 获取状态信息
 const getter = {
 showState(state) {
  console.log(state.msg)
 }
 }


 // 下面这个相当关键了,所有模块,记住是所有,注册才能使用
 export default new Vuex.Store{
 state,
 getter,
 mutations,
 actions
 }

步骤2:在子组件中使用(保存输入)

具体到我这里,是在c-form中使用它:

<template>
 <div>
  <input type="text" @blur=saveName(username) v-model="username" placeholder="Your name">
 </div>
</template>

<script type="text/javascript">
 // 引入mapActions,很重要
 import { mapActions } from 'vuex'
 export default {
 data() {
  return {
  username:'',
  password: ''
  }
 },
 methods: {
  ...mapActions({
  // 在input 的blur 事件中触发回调,并将输入值作为参数返回到store中
  saveName: 'saveName' 
  })
 }
 }
</script>

步骤3:获取在步骤2 中的输入值(获取state)

<template>
 <div id="login">
 <c-header></c-header>
 <c-form></c-form>
 <p class="content-block"><a href="javascript:;" rel="external nofollow" rel="external nofollow" @click=showState class="button button-fill button-success">登录</a></p>
 </div>
</template>

<script>
// 引入mapGtters,很重要
import { mapGetters } from 'vuex'
 export default {
 methods: {
  ...mapGetters([
  // 在store.js 中注册的getters
  'showState'
  ])
 },
 components: {
  "c-form": require('../components/form.vue'),
  "c-header": require('../components/header.vue')
 }
 }
</script>

至此,我们就能得到输入值了。

VUE使用vuex解决模块间传值问题的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
限制复选框的最大可选数
Jul 01 Javascript
js对象的构造和继承实现代码
Dec 05 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
javascript实现完美拖拽效果
May 06 Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 Javascript
React中的refs的使用教程
Feb 13 Javascript
Node.js的Koa实现JWT用户认证方法
May 05 Javascript
Angular4 组件通讯方法大全(推荐)
Jul 12 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
nodemon实现Typescript项目热更新的示例代码
Nov 19 Javascript
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
vue快捷键与基础指令详解
Jun 01 #Javascript
详解vuejs几种不同组件(页面)间传值的方式
Jun 01 #Javascript
Vue.js中兄弟组件之间互相传值实例
Jun 01 #Javascript
Vue.Draggable实现拖拽效果
Jul 29 #Javascript
JS请求servlet功能示例
Jun 01 #Javascript
vue.js加载新的内容(实例代码)
Jun 01 #Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 #Javascript
You might like
PHP分页类集锦
2014/11/18 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
python开启多个子进程并行运行的方法
2015/04/18 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python中wheel的用法整理
2020/06/15 Python
pandas参数设置的实用小技巧
2020/08/23 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
怎样写好自我鉴定
2013/12/04 职场文书
《我的信念》教学反思
2014/02/15 职场文书
年级组长自我鉴定
2014/02/22 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL