【发布时间】:2023-04-10 16:51:01
【问题描述】:
感谢阅读,我对这种反应性行为感到很困惑。我在导航栏上有按钮,根据应用组件(App.vue)中的条件显示:
<button
type="button"
v-if="loggedIn()"
@click="logout"
class="btn btn-outline-light"
>
与相关的脚本:
methods: {
loggedIn() {
return !(auth.getUser() == null);
},
这里一切正常,登录后会出现注销按钮。现在我被指示将设计更改为侧边栏,并使用完全相同的 html 和脚本创建侧边栏组件 (SideBar.vue)。唯一的问题是,按钮对更改没有反应。唯一的区别是导航栏在 App.vue 中,而 SideBar 是 App 的一个组件,如下所示:
<template>
<div id="app">
<div id="nav">
<nav class="navbar navbar-expand-lg navbar-light ">
// navbar elements with reactive buttons
</nav>
<side-bar />
</div>
<main>
<router-view />
</main>
</div>
</template>
编辑: 我试图在组件中使用计算属性但没有成功。 我找到了一种通过将属性从应用程序传递到侧边栏组件来使其工作的方法,但我不喜欢它,因为我可能稍后必须进行扩展。有任何想法吗?提前致谢。
【问题讨论】:
-
你应该使用计算属性而不是方法,这不是反应性错误
-
我也试过computed,还是不行。
-
如果您使用计算,那么您应该在模板中省略
(),即v-if="loggedIn"。还有auth.getUser()是做什么的?我希望它不是异步方法或返回承诺的东西。 -
谢谢特里,如果你把括号放在你身上,无论如何, auth.getUser() 不是异步的,它只是从本地存储中获取令牌(jwt)并解析它。
-
我能说的唯一区别是,当我登录时,在 app.vue 中调用了 loggedIn(),但在 SideBar.vue 中则没有
标签: javascript vue.js