循环出来的数据是填充左侧边栏的,如何默认选中第一个数据呢? li v-for="debtor in filteredDebtors" :key="debtor.id" class="debtor-list-item"
1
murmur 2020-01-09 16:15:18 +08:00
for 是可以用 item,index 这样的进行循环,有了 index 判断条件就可以了
|
2
bojackhorseman 2020-01-09 16:17:30 +08:00
index 了解一下,(debtor, index) in blablabla
|
3
NotreDame OP |
4
bojackhorseman 2020-01-09 16:20:18 +08:00
@NotreDame #3 設置一個變量為選中項的 index,默認為 0
|
5
virtual2019 2020-01-09 16:29:09 +08:00 via iPhone
|
6
learnshare 2020-01-09 16:32:02 +08:00
跟 v-for 没关系,应该另指定一个数据 selected
在获取到列表之后,初始化 selected = list[0].value |
7
murmur 2020-01-09 16:34:53 +08:00
|
8
murmur 2020-01-09 16:35:27 +08:00
第二条的 class 用变量形式:class
|
9
murmur 2020-01-09 16:37:59 +08:00
突然发现 6 楼说的可能是对的,你是要做一个菜单么,那你需要一个默认值的变量,index 就不是跟 0 比了,是跟 data 里的比如 selectedIndex,然后菜单的 @click 去改 selectedIndex 的值
|
10
sivacohan 2020-01-09 16:41:07 +08:00 via iPhone
用模版的 for index 是可行的。
我个人更倾向于使用 computed,给列表里面增加一个 seleced 的 key,值为 true/false。这样,无论后续是单选还是多选或者是 radio,都不用动逻辑了。 同时,这样做也符合 vue 逻辑和模版分离的原则。 |
11
daguaochengtang 2020-01-09 16:54:37 +08:00
<li v-for="(item, index) in list" :key="item.id" :class="['list-item', index===curIndex ? 'active' : '']"></li>
data() { return { curIndex: 0 } } class 部分,因为有固定的,也有动态的。可以用数组,也可以用对象`:class="{'list-item': true, 'active': index === curIndex}"` |
12
shintendo 2020-01-09 17:05:40 +08:00
不建议用 index 比较
你的数据有两个:表示可选项的 filteredDebtors,和表示选中项的 selectedDebtorId 你的模版只需要忠实反映数据,即“循环渲染列表项,其中选中的项有特殊样式” li v-for="debtor in filteredDebtors" :key="debtor.id" class="debtor-list-item" :class="{'debtor-list-item-highlight': debtor.id===selectedDebtorId}" 至于“默认选中第一项”,无非是初始化 selectedDebtorId = filteredDebtors[0].id 而已 |
13
shintendo 2020-01-09 17:09:49 +08:00
@nikolausliu
class 和:class 可以一起写的,固定的部分都写 class 里 |