【发布时间】:2017-03-10 20:57:43
【问题描述】:
我在 Vue.js 应用程序中遇到了一个令人费解的反应属性问题,这可能是我的误解造成的,我希望有人能提供帮助。在我的 App.vue 中,我有 import auth from 'src/auth.js',在我的数据属性中我有这个:
data() {
return {
authenticated: auth.user.authenticated,
role: auth.user.role
}
},
这个经过身份验证的属性用于显示或隐藏各种菜单项,例如:
<li v-if="!authenticated">
<router-link to="/login">Log In</router-link>
</li>
<li v-if="authenticated"><a href="#" @click.prevent="logout">Log Out</a></li>
我发现对“auth.user.authenticated”的更改(例如,在成功登录后从 false 切换为 true)没有反映在菜单项的呈现中 - 即经过身份验证的数据属性未更新。为此,我必须在“更新前”和注销方法中使用this.authenticated=auth.user.authenticated 显式更新它。起初我认为这只是在第一次创建时分配而不是随后更新,如果我使用计算属性,这将是动态的,但这也不起作用。显然,我的 App 组件不知道对“身份验证”数据的更改。我怎样才能使更新是自动的?我目前正在使用它,但使用“更新前”感觉就像是一个杂物。
【问题讨论】:
-
尝试将
authenticated设为返回auth.user.authenticated的计算属性 -
auth是不是非 Vue 的东西? -
谢谢,我在上面确实说过我尝试过使用计算机属性。但我一定是做错了什么,因为我刚刚再次尝试回应您的评论,现在我发现它有效!
-
实际上说得太早了。计算属性方法不起作用(我认为它起作用是因为 npm run dev 没有编译更改的组件 - 它有时会这样做 - 我仍然看到旧版本有效)。 Roy J,您所说的“身份验证是非 Vue 的东西”是什么意思?
-
auth是 Vue 组件,还是不是由 Vue 创建或管理的某个对象?
标签: vue.js