用Vue组件当全局变量传值,获取不到?

组件global,用于存放用户登录信息。
global.vue

<script type="text/ecmascript-6">
    const CLIENT_ID = '';
    const USER_INFO = {};
    const SESSION_GLOBAL = {};
    
    export default {
        CLIENT_ID,
        USER_INFO,
        SESSION_GLOBAL
    }
</script>

header.vue

import global from '../../components/global/global.vue';

created(){
let cookie_arr = document.cookie.split(';');
    for(let i = 0; i < cookie_arr.length; i++){
        let cookieArrTrim  = cookie_arr[i].trim();
        if(cookieArrTrim.indexOf('client_id') == 0){
            global.CLIENT_ID = cookieArrTrim.substring('client_id'.length + 1, cookieArrTrim.length);
            if(global.CLIENT_ID !== ''){
                this.$http.get('http://192.168.1.5/app/getClient.action', {
                    params: {
                        'clientId': global.CLIENT_ID
                    }
                }).then(response => {
                    response = response.body;
                    global.USER_INFO = response.object;

                    this.user_info.avatar = global.USER_INFO.imgUrl;
                    this.user_info.user_name = global.USER_INFO.nickName;
                    this.user_info.phone = global.USER_INFO.phone;

                    console.log(global);



                })
            }
        }

        else{
            return;
        }
    }
}
                                
console.log(global);

图片描述

sell_car.vue

import global from '../../components/global/global.vue';

console.log(global.CLIENT_ID);

图片描述

但打印global是可以获取到的。
在safari和chrome里只有点开对象才能看见值,firefox里可以直接看到。
图片描述
图片描述

阅读 7.7k
2 个回答

看到console.log()没点开的时候是没值的。估计还是使用时机的问题,即用到的时候还没有赋值,由于console.logd的机制,你需要在出问题的地方,使用console.log(JSON.stringify(xxx))转字符串输出看看。
另外,看你的global.vue只是对外暴露了一个有三个属性的对象,没必要命名成.vue文件,可以直接使用.js文件,效果是一样的。

我觉得你这个设计想法就有问题,组件是每个地方调用都实例化一次,怎么可能传值呢?

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