详解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 相关文章推荐
JavaScript 继承的实现
Jul 09 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
Mar 09 Javascript
javascript每日必学之继承
Feb 23 Javascript
非常酷炫的Bootstrap图片轮播动画
May 27 Javascript
jQueryUI DatePicker 添加时分秒
Jun 04 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 Javascript
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
微信小程序封装分享与分销功能过程解析
Aug 13 Javascript
javascript使用canvas实现饼状图效果
Sep 08 Javascript
elementUI同一页面展示多个Dialog的实现
Nov 19 Javascript
vue-router定义元信息meta操作
Dec 07 Vue.js
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
PHP中的超全局变量
2006/10/09 PHP
ie6 动态缩略图不显示的原因
2009/06/21 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
python中使用print输出中文的方法
2018/07/16 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
Django实现文件上传下载
2019/10/06 Python
python 实现dict转json并保存文件
2019/12/05 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
电大物流学生的自我评价
2013/10/25 职场文书
公司年底活动方案
2014/08/17 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
学困生转化工作总结
2015/08/13 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
同学联谊会邀请函
2019/06/24 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
导游词之日本富士山
2020/01/06 职场文书
vue router 动态路由清除方式
2022/05/25 Vue.js
Flink 侧流输出源码示例解析
2022/09/23 Servers