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

发布于 2022-09-12 22:21:24 字数 494 浏览 23 评论 0

问题描述

我在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 里面的属性进行操作

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

恏ㄋ傷疤忘ㄋ疼 2022-09-19 22:21:25

this.$store不行?

静待花开 2022-09-19 22:21:25

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

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);
})}

心房敞 2022-09-19 22:21:25
getCurrentPages()[0].$vm.$store

uni-app限定

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文