鍍金池/ 問答/HTML/ 用Vue組件當全局變量傳值,獲取不到?

用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里可以直接看到。
圖片描述
圖片描述

回答
編輯回答
舊城人

我覺得你這個設計想法就有問題,組件是每個地方調用都實例化一次,怎么可能傳值呢?

2017年3月30日 08:53
編輯回答
囍槑

看到console.log()沒點開的時候是沒值的。估計還是使用時機的問題,即用到的時候還沒有賦值,由于console.logd的機制,你需要在出問題的地方,使用console.log(JSON.stringify(xxx))轉字符串輸出看看。
另外,看你的global.vue只是對外暴露了一個有三個屬性的對象,沒必要命名成.vue文件,可以直接使用.js文件,效果是一樣的。

2017年9月22日 18:56