vue v-if 从false变为true时不显示元素

发布于 2022-09-13 01:21:31 字数 1459 浏览 28 评论 0

在项目里引入了 Vuetify、Vuex 和 router,然后设计了一个按钮,仅特定角色的用户手机端特定页面能够显示:

<!--Component.vue-->
<v-menu bottom left>
    <template v-slot:activator="{ on, attrs }">
        <v-btn class="d-flex d-sm-none" v-if="showAdminMenu"
            dark icon v-bind="attrs" v-on="on">
            <!--两个Vuetify类控制仅手机端显示,v-if控制角色和页面条件-->
            <v-icon>mdi-dots-vertical</v-icon>
        </v-btn>
    </template>       
    <v-list>
        ...
    </v-list>
</v-menu>
// Component.vue
computed:{
    user: function(){
        return this.$store.state.userInfo
    },
    showAdminMenu: function(){
        return (this.user.role==3 && this.$route.name=='Admin')
    },
}

//router配置文件里的定义
{
    path: '',
    name: 'Home',
    meta: {title:'首页'},
},
{
    path: '/admin',
    name: 'Admin',
    meta: {title:'管理员后台'},
}

//Vuex配置文件里的数据
state: {
    userInfo: {role: 3},
},

但效果是:

  • 一开始在首页,按钮不显示;通过页内router链接跳转到管理员后台,依旧不显示
  • 一开始在管理员后台,按钮显示;通过页内router链接跳转到首页,按钮消失;再通过业内链接跳回来,按钮不再显示
  • v-if 改为 v-show,则无论 showAdminMenu 为何值,按钮必然显示
  • 移除两个 Vuetify 类没有任何变化

中间我试过 log role$route.name 的值,都是预期值,return 的表达式也是 Boolean 的 T/F,加上我头一次用 cli 建立项目,所以百思不得其解,恳请各位帮忙解答。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

作业与我同在 2022-09-20 01:21:31

showAdminMenu可以直接放到页面上 你看他的值是什么 怎么变化的
首先computed写法 注意this指向
showAdminMenu(){

return //....

}
再就是vuex获取值应该是this.$store.state.userInfo.role

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文