Javascript Vue.js-带有动态v-if的动态按钮
我正在动态生成一些菜单按钮,不确定这是否是最佳做法 剧本Javascript Vue.js-带有动态v-if的动态按钮,javascript,vue.js,vuejs2,vue-component,vuetify.js,Javascript,Vue.js,Vuejs2,Vue Component,Vuetify.js,我正在动态生成一些菜单按钮,不确定这是否是最佳做法 剧本 items: [ { title: 'Dashboard', icon: 'mdi-view-dashboard', route: '/' }, { title: 'Register', icon: 'mdi-image', route: '/register' }, { title: 'Login', icon: 'mdi-help-box', route: '/login' }, ], html 如何根据登录值以编程方式隐藏按钮?我
items: [
{ title: 'Dashboard', icon: 'mdi-view-dashboard', route: '/' },
{ title: 'Register', icon: 'mdi-image', route: '/register' },
{ title: 'Login', icon: 'mdi-help-box', route: '/login' },
],
html
如何根据登录值以编程方式隐藏按钮?我正试着这么做
{ title: 'Dashboard', icon: 'mdi-view-dashboard', route: '/', reqAuth: true }
但不知道如何让它在html中顺利运行。我还想在稍后的登录/注册按钮上做相反的操作,如果用户已登录,则这些按钮应隐藏,注销按钮将发挥作用。您的items属性应定义为computed属性,并在每个items中添加Showed字段,并在dashboard链接中使用state value作为其值:
computed :{
items(){
const signedIn=$store.state.user.signedIn;
return [
{ title: 'Dashboard', icon: 'mdi-view-dashboard', route: '/', shown:signedIn },
{ title: 'Register', icon: 'mdi-image', route: '/register',shown:!signedIn},
{ title: 'Login', icon: 'mdi-help-box', route: '/login' , shown:!signedIn},
]
}
}
在模板中添加
<v-list-item v-for="(item, i) in items" :key="i" link v-if="item.shown" :to="{path: item.route}">
您的items属性应定义为computed属性,并在每个items项目中添加Showed字段,并在dashboard链接中使用state value作为其值:
computed :{
items(){
const signedIn=$store.state.user.signedIn;
return [
{ title: 'Dashboard', icon: 'mdi-view-dashboard', route: '/', shown:signedIn },
{ title: 'Register', icon: 'mdi-image', route: '/register',shown:!signedIn},
{ title: 'Login', icon: 'mdi-help-box', route: '/login' , shown:!signedIn},
]
}
}
在模板中添加
<v-list-item v-for="(item, i) in items" :key="i" link v-if="item.shown" :to="{path: item.route}">
您有两个选择:
A具有单独的菜单阵列,并基于isLoggedIn显示一个或另一个。如果在这两种情况下都显示了任何项,则需要将它们放置在第三个数组中,并将前两个数组中的一个与第三个数组合并
B在每个菜单项上都有一个布尔属性,说明在isLoggedIn时是否应该显示。如果两个菜单项都显示,则每个菜单项都需要两个道具showWhenLoggedIn,showWhenLoggedOut-如果太长,请更改它们,或者,您可以将该节目设置为布尔值数组:show:[真,假]-第一个布尔值控制是否在注销时显示,第二个布尔值控制是否在登录时显示。
解决方案一个单独阵列的示例:
Vue.config.devtools=false;
Vue.config.productionTip=false;
新Vue{
el:“应用程序”,
数据:=>{
loggedInMenuItems:[
{title:'Dashboard',icon:'mdi view Dashboard',route:'/',show:[false,true]},
],
loggedOutMenuItems:[
{title:'Register',icon:'mdi image',route:'/Register',show:[true,false]},
{标题:“登录”,图标:“mdi帮助框”,路径:'/Login',显示:[true,false]},
],
永久菜单项:[
{title:'Terms and Conditions',图标:'mdi whatever',路由:'/Terms',显示:[true,true]}
],
伊斯洛格丁:错
},
计算:{
菜单项{
返回这个.isLoggedIn
?此.loggedInMenuItems
:this.loggedOutMenuItems
.concatthis.permanentMenuItems
}
}
}
已登录
您有两个选择:
A具有单独的菜单阵列,并基于isLoggedIn显示一个或另一个。如果在这两种情况下都显示了任何项,则需要将它们放置在第三个数组中,并将前两个数组中的一个与第三个数组合并
B在每个菜单项上都有一个布尔属性,说明在isLoggedIn时是否应该显示。如果两个菜单项都显示,则每个菜单项都需要两个道具showWhenLoggedIn,showWhenLoggedOut-如果太长,请更改它们,或者,您可以将该节目设置为布尔值数组:show:[真,假]-第一个布尔值控制是否在注销时显示,第二个布尔值控制是否在登录时显示。
解决方案一个单独阵列的示例:
Vue.config.devtools=false;
Vue.config.productionTip=false;
新Vue{
el:“应用程序”,
数据:=>{
loggedInMenuItems:[
{title:'Dashboard',icon:'mdi view Dashboard',route:'/',show:[false,true]},
],
loggedOutMenuItems:[
{title:'Register',icon:'mdi image',route:'/Register',show:[true,false]},
{标题:“登录”,图标:“mdi帮助框”,路径:'/Login',显示:[true,false]},
],
永久菜单项:[
{title:'Terms and Conditions',图标:'mdi whatever',路由:'/Terms',显示:[true,true]}
],
伊斯洛格丁:错
},
计算:{
菜单项{
返回这个.isLoggedIn
?此.loggedInMenuItems
:this.loggedOutMenuItems
.concatthis.permanentMenuItems
}
}
}
已登录