根据官方 Vue.js 文档,我正在试验Vue.js(版本 2.5.16)及其v-for
指令,它应该能够根据某个整数范围重复一个元素。具体来说,我正在尝试编写一个基于整数值属性绘制多个循环计数器的组件。
下面的代码片段,包含硬编码的文字值10
,确实精确地渲染了十个圆圈:( jsfiddle )
<svg class="counter" v-for="n in 10" :key="n"
xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 10 10">
<circle cx="5" cy="5" r="5"></circle>
</svg>
但是,硬编码该值的用处有限。我在组件中添加了一个整数值属性,如下所示:(typescript)
export default Vue.extend({
props: {
counter: Number
},
...
...并尝试了该v-for
指令的以下变体:
但是它们都没有实现可变数量的渲染圆圈。(注意:我使用了 Vue 开发者工具来确保counter
组件的属性确实保持正确的值。)
这让我想到了我的问题:如何使用v-for
由组件属性设置的整数范围?
如果这是不可能的,那么整数范围支持v-for
确实是没有用的。多久使用一次硬编码范围?
但是,我仍然想要这种行为。如果没有 ,将如何实现它v-for
?我可以想到几种可能的选择:
- 编写我自己的渲染函数。
- 在计算属性中使用该
counter
属性,该属性返回所需大小的数组并在该数组上使用。v-for
- 绑定
v-for
到一个数组并挂钩属性的更改,以仅使用数组更改检测页面counter
上列出的数组突变来更新该内部数组,这样Vue就不会在每次更改时丢弃和重建整个 DOM 子结构。
对于这样一个简单的用例,选项 1 似乎需要大量工作。选项 2 非常简单,但我担心它会导致Vue在每次更改时丢弃并重新生成所有重复的子元素。如果可能的话,选项 3 似乎表现最好,但我真的不知道该怎么做。(正如我所说,我是第一次研究Vue。)
该怎么办?