迭代多个对象时在 VueJS 中很好地设置 tabIndex
Setting tabIndex nicely in VueJS when iterating over multiple objects
我有几个嵌套对象需要迭代以创建输入。我把它简化为下面的一个例子。我想在这些输入中设置 tabIndexes。
<div v-for="(iv, ik, ii) in {a: 'x', b: 'x'}" :key="ii">
<div v-for="(jv, jk, ji) in {a: 'y', b: 'y'}" :key="ji">
<div v-for="(kv, kk, ki) in {a: 'z', b: 'z', c: 'z'}" :key="ki">
<input type="text" :tabindex="(ii * 100) + (ji * 10) + ki" />
<label>{{(ii * 100) + (ji * 10) + ki}}</label>
</div>
</div>
</div>
将我的 tabindex 设置为 0、1、2、3 等的最佳方法是什么?我发现在 v-for 上设置第三个 arg 提供了一个数字索引,但我得到的似乎有点令人费解。有没有更好的方法可以解决这个问题?
以上结果如下所示:
[___________] 0
[___________] 1
[___________] 2
[___________] 10
[___________] 11
[___________] 12
[___________] 100
[___________] 101
[___________] 102
[___________] 110
[___________] 111
[___________] 112
哪个有效,但似乎不太理想。我知道如果 Tab 键是连续的并且间隙看起来很好,它们将按预期工作。但是有没有一种更简洁的方法可以让我得到 1 到 12 而不是我得到的交错数字?基本上就像每次我点击时的 运行 索引(x++ 等)?
我尝试在 'data' 中设置一个整数,然后使用一种方法来增加它,但很快就陷入了无限重新渲染循环。
谢谢。
有一个技巧可以做到这一点,但这是一个技巧,并不是最佳实践
模板:
{{numitems = 0 | hide}}
<div v-for="(iv, ik, ii) in {a: 'x', b: 'x'}" :key="ii">
<div v-for="(jv, jk, ji) in {a: 'y', b: 'y'}" :key="ji">
<div v-for="(kv, kk, ki) in {a: 'z', b: 'z', c: 'z'}" :key="ki">
<input type="text" :tabindex="numitems += 1" />
<label>{{(ii * 100) + (ji * 10) + ki}}</label>
</div>
</div>
</div>
脚本hide
过滤器定义
filters: {
hide: function(value){
return ''
}
}
您不需要隐藏过滤器,但它确保您在定义期间不会将任何内容放入模板。您还可以在 data
中定义 numitems
。并使用方法进行重置和递增。
另一个选项是设置一个计算值,该值使用您生成的数字作为增量值的索引,没有任何间隙。
只要您的对象的键发生变化,您就可以进行计算,使用您的方法或使用对象生成键。
这里有一个使用 ${ik}_${jk}_${kk}
作为键的例子
tabIndexVals(): {
let c = 0;
let o = {};
Object.keys(i).forEach(ik => {
Object.keys(i[ik]).forEach(jk => {
Object.keys(i[ik][jk]).forEach(kk => {
let key = `${ik}_${jk}_${kk}`;
o[key] = c;
c++;
})
})
})
return o;
}
我有几个嵌套对象需要迭代以创建输入。我把它简化为下面的一个例子。我想在这些输入中设置 tabIndexes。
<div v-for="(iv, ik, ii) in {a: 'x', b: 'x'}" :key="ii">
<div v-for="(jv, jk, ji) in {a: 'y', b: 'y'}" :key="ji">
<div v-for="(kv, kk, ki) in {a: 'z', b: 'z', c: 'z'}" :key="ki">
<input type="text" :tabindex="(ii * 100) + (ji * 10) + ki" />
<label>{{(ii * 100) + (ji * 10) + ki}}</label>
</div>
</div>
</div>
将我的 tabindex 设置为 0、1、2、3 等的最佳方法是什么?我发现在 v-for 上设置第三个 arg 提供了一个数字索引,但我得到的似乎有点令人费解。有没有更好的方法可以解决这个问题?
以上结果如下所示:
[___________] 0
[___________] 1
[___________] 2
[___________] 10
[___________] 11
[___________] 12
[___________] 100
[___________] 101
[___________] 102
[___________] 110
[___________] 111
[___________] 112
哪个有效,但似乎不太理想。我知道如果 Tab 键是连续的并且间隙看起来很好,它们将按预期工作。但是有没有一种更简洁的方法可以让我得到 1 到 12 而不是我得到的交错数字?基本上就像每次我点击时的 运行 索引(x++ 等)?
我尝试在 'data' 中设置一个整数,然后使用一种方法来增加它,但很快就陷入了无限重新渲染循环。
谢谢。
有一个技巧可以做到这一点,但这是一个技巧,并不是最佳实践
模板:
{{numitems = 0 | hide}}
<div v-for="(iv, ik, ii) in {a: 'x', b: 'x'}" :key="ii">
<div v-for="(jv, jk, ji) in {a: 'y', b: 'y'}" :key="ji">
<div v-for="(kv, kk, ki) in {a: 'z', b: 'z', c: 'z'}" :key="ki">
<input type="text" :tabindex="numitems += 1" />
<label>{{(ii * 100) + (ji * 10) + ki}}</label>
</div>
</div>
</div>
脚本hide
过滤器定义
filters: {
hide: function(value){
return ''
}
}
您不需要隐藏过滤器,但它确保您在定义期间不会将任何内容放入模板。您还可以在 data
中定义 numitems
。并使用方法进行重置和递增。
另一个选项是设置一个计算值,该值使用您生成的数字作为增量值的索引,没有任何间隙。
只要您的对象的键发生变化,您就可以进行计算,使用您的方法或使用对象生成键。
这里有一个使用 ${ik}_${jk}_${kk}
作为键的例子
tabIndexVals(): {
let c = 0;
let o = {};
Object.keys(i).forEach(ik => {
Object.keys(i[ik]).forEach(jk => {
Object.keys(i[ik][jk]).forEach(kk => {
let key = `${ik}_${jk}_${kk}`;
o[key] = c;
c++;
})
})
})
return o;
}