Javascript 使用:键绑定组件上的全局变量

Javascript 使用:键绑定组件上的全局变量,javascript,vue.js,vue-component,Javascript,Vue.js,Vue Component,我在一个Vue项目中工作,我有一个登录页面,当用户登录时,该页面会重定向到主页 问题是,当用户在主页上时,我需要更新/重新呈现标题组件 因此,我在main.ts中创建了一个全局变量: 梅因酒店 Vue.prototype.isLogin=false; 我使用此全局值作为标题的键: App.vue {{notif.message}} 在登录组件上,在我的Login()方法中: Login.vue AdminApi.login(this.email,this.password)。然后(()=>

我在一个Vue项目中工作,我有一个登录页面,当用户登录时,该页面会重定向到主页

问题是,当用户在主页上时,我需要更新/重新呈现标题组件

因此,我在main.ts中创建了一个全局变量:

梅因酒店
Vue.prototype.isLogin=false;
我使用此全局值作为标题的键:

App.vue

{{notif.message}}
在登录组件上,在我的
Login()方法中:

Login.vue
AdminApi.login(this.email,this.password)。然后(()=>{
this.loaderActive=false;
this.isLogin=true;
});

问题是,当用户成功登录并在主页上重定向时,标题组件不会更新,我是否需要在我的
应用程序中使用prop而不是全局变量。vue

vue在检测到它所依赖的数据发生更改时更新它的内容。为了让Vue检测到它的变化,数据需要是被动的

原型链上的某些东西不是,我认为你使用原型链太复杂了。要管理全局状态,只需使用Vuex存储。()


然后在
计算的
属性中使用
…映射器(['isLoggedIn'])
this.$store.commit('loggedIn',true)
或Login.vue文件中类似的内容。

vue在检测到它所依赖的数据发生更改时更新它的内容。为了让Vue检测到它的变化,数据需要是被动的

原型链上的某些东西不是,我认为你使用原型链太复杂了。要管理全局状态,只需使用Vuex存储。()


然后,您可以在
computed
属性中使用
…映射器(['isLoggedIn'])
this.$store.commit('loggedIn',true)
或者在Login.vue文件中使用类似的内容。

如果我错了,经验丰富的人应该纠正我,但这听起来可能是一个反应性问题。我的印象是,在vue实例的数据对象之外创建这样的全局变量意味着。这意味着Vue无法判断它何时更改,我认为这可能会导致将其用作键时出现问题。因此,如果我想创建一个全局变量,如果我理解正确,我需要在App.Vue中实例化它?您可以将其添加到您的App.Vue
data()
并将其作为道具传递,但如果您在嵌套组件中需要它,这可能变得不切实际,因为您必须将它作为道具传递给每个需要它的组件。Vuex状态管理是一个更优雅的解决方案,尽管将其用于单个var可能会感觉有些过分,如果这真的是您唯一使用它的话。我在
App.vue
中创建了一个
data()
属性,它返回一个
isLogin:false
,但在
Login()中的my
Login.vue
方法,我调用
this.isLogin
它是
未定义的
,我是否需要执行其他操作才能正确传递值?如果您想纯粹使用类似的道具和数据方法,那么您需要传递该
isLogin
属性或道具,从您的
App.vue
到您的
Login.vue
,通过您当前设置的任何组件层次结构。如果我错了,经验比我丰富的人应该纠正我,但这听起来可能是一个反应性问题。我的印象是,在vue实例的数据对象之外创建这样的全局变量意味着。这意味着Vue无法判断它何时更改,我认为这可能会导致将其用作键时出现问题。因此,如果我想创建一个全局变量,如果我理解正确,我需要在App.Vue中实例化它?您可以将其添加到您的App.Vue
data()
并将其作为道具传递,但如果您在嵌套组件中需要它,这可能变得不切实际,因为您必须将它作为道具传递给每个需要它的组件。Vuex状态管理是一个更优雅的解决方案,尽管将其用于单个var可能会感觉有些过分,如果这真的是您唯一使用它的话。我在
App.vue
中创建了一个
data()
属性,它返回一个
isLogin:false
,但在
Login()中的my
Login.vue
方法,我调用
this.isLogin
它是
未定义的
,我是否需要执行其他操作才能正确传递值?如果您想纯粹使用类似的道具和数据方法,那么您需要传递该
isLogin
属性或道具,从您的
App.vue
到您的
Login.vue
,通过您当前设置的组件层次结构。Vuex肯定会在这里工作,以管理所有组件都可以访问的变量,问题是管理单个var是否过火。如果一个足够大的应用程序没有更多更适合Vuex的数据,这会让我感到惊讶。不,@Sumurai8建议使用Vuex,这是一种状态管理工具,允许您拥有一个或多个“存储”您可以在整个应用程序中访问的变量。关于这方面有更多信息。如果你想走这条路,也可以创建自己的存储模式,如前所述,但这可能会带来更多麻烦。Vuex肯定会在这里工作,以管理所有组件都可以访问的变量,问题是,管理单个var是否过火了。如果一个足够大的应用程序没有更多更适合Vuex的数据,我会感到惊讶。不,@Sumurai8建议使用Vuex,一个