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 里面的属性进行操作
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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);
})}
uni-app限定