Vue中v-show添加表达式的问题
一、需求场景
1、先来说说我的需求,有数据来源和标签类型两行选项,如下图所示:
2、根据需求,我需要在点击上面的某个数据来源的时候,下面的标签类型自动切换,
需求说明如下:
3、一开始 是想写死的,就是把各种情况写死在页面上,后来查看官方文档一会,
数据来源的集合可以这样写,id为各个类型的标识,name为名称,mark为点击
某个数据来源 的时候标签类型根据当前点击的数据来源进行判断切换。如下图:
infoTypeList: [
{
id: 11,
name: '新闻',
mark: 'news'
},
{
id: 13,
name: '论坛',
mark: 'bbs'
},
{
id: 17,
name: '微博',
mark: 'wb'
},
{
id: 6,
name: '微信',
mark: 'wx'
},
{
id: 7,
name: 'APP',
mark: 'app'
},
{
id: 8,
name: '平媒',
mark: 'pm'
},
{
id: 20,
name: '境外',
mark: 'overseas'
},
{
id: 21,
name: 'Facebook',
mark: 'facebook'
},
{
id: 22,
name: 'Twitter',
mark: 'twitter'
}
],
4、然后标签类型集合数据结构如下,其中mark字段存放哪些数据来源包含于当前标签。
markTypeList
: [
{
id
:
32
,
name
:
'
主帖
'
,
mark
:
'bbs'
}
,
{
id
:
33
,
name
:
'
回帖
'
,
mark
:
'bbs'
}
,
{
id
:
34
,
name
:
'
原创
'
,
mark
:
'wb'
}
,
{
id
:
35
,
name
:
'
转发
'
,
mark
:
'wb_wx'
}
,
{
id
:
36
,
name
:
'
头条
'
,
mark
:
'news_app_wx_pm'
}
,
{
id
:
37
,
name
:
'
头图
'
,
mark
:
'app'
}
,
{
id
:
38
,
name
:
'
置顶
'
,
mark
:
'app'
}
,
{
id
:
39
,
name
:
'
要闻
'
,
mark
:
'news'
}
,
{
id
:
40
,
name
:
'
头版
'
,
mark
:
'pm'
}
,
]
,
5、在数据来源的各个名称中加入一个点击事件,data中存入一个变量infoTypeMark,
用于保存点击的数据来源标识,我也数据来源的代码贴出来了。
<div
v-if=
"
isShowSingleInfoType
"
>
<label
class=
"left-10"
>
数据来源
</label>
<span
class=
"info-type activecolor"
@click=
"
changeInfoType
(-
1
)
"
>
全部
</span>
<span
class=
"info-type"
@click="changeInfoType(item.id, item.mark)
"
v-for=
"
item
in
infoTypeList
"
:key=
"
item
.
id
"
>
{{
item
.
name
}}
</span>
<label
class=
"multichoose"
>
<Button
@click=
"
toggleInfoType
"
size=
"small"
>
+
多选
</Button>
</label>
</div>
6、重点是下面这一行代码,通过在v-show中添加表达式,用于判断点击新闻,
应该显示头条和要闻,主要看标红的那块,代码如下:
<div
class=
"layout-content-main"
>
<label
class=
"left-10"
>
标签类型
</label>
<span
class=
"mark-type activecolor"
@click=
"
changeMarkType
(-
1
)
"
>
全部
</span>
<span
v-show="item.mark.indexOf(infoTypeMark) > -1"
class=
"mark-type"
@click=
"
changeMarkType
(
item
.
id
)
"
v-for=
"
item
in
markTypeList
"
:key=
"
item
.
id
"
>
{{
item
.
name
}}
</span>
</div>
如此就不用写那么多判断了,如上是我在开发的过程中遇到的一个小问题,
若有更好的方法,还希望告诉菜鸟我,3Q!