Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Vuejs中创建全局变量_Javascript_Global Variables - Fatal编程技术网

Javascript 在Vuejs中创建全局变量

Javascript 在Vuejs中创建全局变量,javascript,global-variables,Javascript,Global Variables,我正在VueJS中创建一个应用程序,我想创建一个服务或全局变量,用于存储客户端是否向服务器发出请求。 我一直在考虑配置一个中断器,它在发出请求时将全局变量设置为true,在请求完成时将变量设置为false 因此,当我使用加载器组件时,它仅在变量为true时显示 例如: //和我一样 {{$t('organization.labels.organization')} {{$t('organization.labels.loading')} //因为它应该起作用 {{$t('organizatio

我正在VueJS中创建一个应用程序,我想创建一个服务或全局变量,用于存储客户端是否向服务器发出请求。 我一直在考虑配置一个中断器,它在发出请求时将全局变量设置为true,在请求完成时将变量设置为false

因此,当我使用加载器组件时,它仅在变量为true时显示

例如:

//和我一样
{{$t('organization.labels.organization')}

{{$t('organization.labels.loading')} //因为它应该起作用 {{$t('organization.labels.organization')} 您是否尝试过:

window.is_loading = true;

if (window.is_loading) { }
根据评论更新:


该变量的作用域对模板不可用。如果可以为ajax响应引发开始/完成事件,则可以在模板之外处理它。代替模板中的条件,将其始终包含在模板中,但将DIV CSS属性设置为display:none。然后在start的事件处理程序中,将其设置为display:inline,并将接收到的响应的事件处理程序再次设置为display:none。

答案是在my app.vue中创建一个变量is_loading,它是应用程序容器($root)


从“users/provider/User.provider”导入UserProvider
从“会话/索引”导入会话
导出默认值{
数据(){
返回{
加载器:{
正在加载:错误
}
}
},
方法:{
getUser(){
var self=这个;
self.$root.loader.is_loading=true;
UserProvider.get()。然后((用户)=>{
self.$root.loader.is_loading=false;
self.current_user=用户;
}).catch((错误)=>{
self.$root.loader.is_loading=false;
})
}
},
就绪(){
这个.getUser();
},
}

您可以制作一个VUEX模块,并将其命名为ajax.js,如下所示:

const state = {
    ajax: {is_loading: false}
};
const mutations = {
    'SET_LOADING' (state, status){
        state.ajax.is_loading = status;
    },
};
const actions = {
    set_loading: ({commit}, status) => {
        commit('SET_LOADING', status);
    },
};
const getters = {
    is_loading: state => {
        return state.ajax.is_loading;
    },
};
export default {
    state,
    mutations,
    actions,
    getters
};
然后必须在store.js文件中注册它

现在,您可以在Vue实例旁边全局使用此代码:

import store from "./store/store";
window.axios.interceptors.request.use(function (config) {
    store.state.ajax.ajax.is_loading = true;
    return config;
}, function (error) {
    store.state.ajax.ajax.is_loading = false;
    return Promise.reject(error);
});

axios.interceptors.response.use(function (response) {
    store.state.ajax.ajax.is_loading = false;
    return response;
}, function (error) {
    store.state.ajax.ajax.is_loading = false;
    return Promise.reject(error);
});
我尝试使用以下代码:

store.state.dispatch('set_loading', true);
但是它没有起作用!因此,我使用另一种语法来更改is_加载的值

现在,在您的组件中,您可以通过以下方式访问is_加载变量:

this.$store.getters.is_loading;
或者通过映射getteres:

computed:{
    ...mapGetters([
        'is_loading'
    ]),
},

这是一个好主意,但是,它对我没有帮助,因为它必须是反应式的,如果你阅读模板,我想使用v-if=”“。你的答案行不通(啊,仔细阅读您的问题,我发现您希望根据连接是否处于活动状态将变量设置为true/false。您的意思是,在用户提交后该变量应为true,而在服务器返回响应时该变量应为false?是的,是这样,但不是连接处于活动状态,而是在通过Ajax发出请求时,在创建Ajax请求之前ed我需要设置$is_loading=true,当ajax请求被解析$is_loading=false时,我不仅需要一个变量,我还需要一个反应变量,我尝试使用Vue.prototype在Vue prototype中对其进行扩展。$is_loading有效,但是当我使用{$is_loading}将其呈现到视图中时,它不是反应变量。:)