详解vuex数据传输的两种方式及this.$store undefined的解决办法


Posted in Javascript onAugust 26, 2019

这个问题很乌龙,但也很值得记录一下, 原因是main.js中import store时将store的首字母写成了大写.

问题版本的如下所示:

import Store from './store'

我大概看了一下, vue似乎不支持在import部分包含带首字母大写的变量,所有import进来的对象必须要小写,我试过把router改成Router, 发现路由部分也会受影响.

这种方式是典型的将vuex值及其中的方法暴露给所有的组件使用, 即将vuex视作一个"全局变量", 但vuex也可以仅提供给部分组件,即谁想用,在谁的script中import这个vuex对象.

第一种方式 - 将vuex提供给所有组件(即在main.js中注册)

//main.js
import Vue from 'vue'
import App from './App'
import store from './store'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.config.productionTip = false
Vue.use(ElementUI)

new Vue({
 router,
 store,
 render: h => h(App)
}).$mount('#app')
//store/index.js
import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

 const store = new Vuex.Store({
  state: {
    n:101
  }
})
export default store
//view部分,即真正的可视化的部分, 这个任何一个组件都可以
<template>
  <div>
    {{ n }}
  </div>
</template>
<script>
export default {
 computed: {
  n () {
    return this.$store.state.n
  }
 }
}
</script>

第二种方式, 仅部分组件可使用vuex

//main.js - 去掉了store的声明
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.config.productionTip = false
Vue.use(ElementUI)

new Vue({
 router,
 render: h => h(App)
}).$mount('#app')
//store/index.js - 这个文件和上面的一样
//想要使用vuex数据的组件. 注意,此时$store是无效的,所以只能通过store.state.n来获取
<template>
  <div>
    {{ n }}
  </div>
</template>
<script>
import store from './store'
export default {
 computed: {
  n () {
    return store.state.n
  }
 }
}

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

Javascript 相关文章推荐
jquery插件jbox使用iframe关闭问题
Feb 09 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
Apr 02 Javascript
js Array对象的扩展函数代码
Apr 24 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
Dec 24 Javascript
根据当前时间在jsp页面上显示上午或下午
Aug 18 Javascript
JavaScript数据结构之单链表和循环链表
Nov 28 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
Jan 15 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
Sep 14 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
Oct 07 Javascript
vue setInterval 定时器失效的解决方式
Jul 30 Javascript
JavaScript快速调试的两个技巧
Nov 04 Javascript
JS阻止事件冒泡的方法详解
Aug 26 #Javascript
express框架中使用jwt实现验证的方法
Aug 25 #Javascript
JS异步处理的进化史深入讲解
Aug 25 #Javascript
Vue源码分析之Vue实例初始化详解
Aug 25 #Javascript
javascript导出csv文件(excel)的方法示例
Aug 25 #Javascript
JavaScript在web自动化测试中的作用示例详解
Aug 25 #Javascript
angularjs自定义过滤器demo示例
Aug 24 #Javascript
You might like
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python中有函数重载吗
2020/05/28 Python
Python中过滤字符串列表的方法
2020/12/22 Python
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
《包身工》教学反思
2016/02/23 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
Redis RDB技术底层原理详解
2021/09/04 Redis