vue, uni app如何在任意一个js文件获取store或者globalData

问题描述

我在main.js里面把app全局导出

export const appMain = new Vue({
  ...App,
  store
})

--any.js

    import {appMain} from 'path/to/main.js'
    function geStore(){
        console.log(appMain)
        // uni app 想获取globalData
        console.log(appMain.globalData) // 得到undefined
        console.log(appMain.$store) // 得到也是undefined 
    }

你期待的结果是什么?实际看到的错误信息又是什么?

我希望不是两个undefined, 而是可以直接对 $store 和 globalData 里面的属性进行操作

阅读 10.1k
3 个回答

this.$store不行?

新手上路,请多包涵

我是这样做在,虽然有点麻烦,但是功能确实可行

1:创建一个bus.js导出一个空对象即可,用于存放vm对象
2:在App.vue中先导入bus,然后onLaunch中写bus.vm = this把vm绑定上去,同理你也可以绑定globalData,其原理类似VueX
3:然后在需要使用vm或者globalData对象的外部js文件中导入bug获取就行了

注意事项:
1:不能在main.js(vm对象创建前)导入或执行从bus中获取vm的代码,因为此时vm还未被绑定到bus中
2:不能在App.vue中直接使用import导入包含从bus中获取vm的文件,因为此时onLaunch还未执行。
例如如果你在requset封装里面用到vm对象而且你又想在App.vue中使用api。
那么你不能像下面这么写:
import bus from "./bus"
import {test} from "@i"//导入api
export default {
onLaunch: function() {
bus.vm = this
console.log('App Launch')
test().then(console.log).catch(err=>{
console.log("err",err);
}) } }</script>
而是应该在bus.vm = this后通过require导入
onLaunch: function() {
bus.vm = this
const {test} = require("@i")
console.log('App Launch')
test().then(console.log).catch(err=>{
console.log("err",err);
})}

getCurrentPages()[0].$vm.$store

uni-app限定

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏