Vue中的v-for循环允许你在模板代码中编写for循环,当我们进行以下操作时特别有用:渲染数组或列表遍历对象的属性在最基本的用法,v-for循环是这样使用的:
但是还有一些你不知道的用法可以使你的v-for代码更加精确和高效。1.在v-for循环中始终使用键让我们从一个很多人都知道的用法开始:在v-for循环中使用键。通过设置独特的关键道具,您可以确保您的组件按预期工作。如果我们不使用键,vue将使DOM尽可能高效。这可能意味着v-for元素可能会出现乱序或行为不可预测。如果我们对每个元素都有一个唯一的键引用,就可以更好地预测DOM将如何被操作。
2.使用v-for在一个范围内循环虽然大多数情况下v-for用于迭代数组或对象,但肯定有一些情况我们可能只想迭代特定次数。假设我们要为我们的在线商店创建一个分页系统,并且我们希望每页只显示10个项目。通过使用变量来跟踪我们当前的页码,可以像这样处理分页:loopingoverarange
{{products[page*10+index]}
3.避免在循环中使用v-if在v-for循环中错误地使用v-if来过滤数据是很常见的[1]。虽然这样做看起来很直观,但它会导致巨大的性能问题——vue的v-for优先于v-if指令[2]。这意味着您的组件将遍历每个元素并检查v-if条件以查看是否应呈现它。如果你把v-if和v-for一起使用,不管你的条件是什么,它都会遍历数组的每一个元素。//错误代码
什么问题上面的代码会导致什么?假设我们的产品数组中有数千个项目,但只需要渲染3个打折产品。然后每次重新渲染,即使卖的3个商品一点都没变,vue也要循环几千个item。所以应该尽可能避免这种情况。以下是使用v-for和v-if的两种替代方法。4.改用计算属性或方法。为了避免上述问题,我们应该在模板中迭代之前过滤数据。有两种非常相似的方法可以做到这一点:使用计算属性使用过滤方法使用哪种方法取决于您。下面对两者进行简单介绍。首先你需要设置一个计算属性。为了达到和之前使用v-if一样的效果,代码应该是这样的:
//...这样有几个好处:data属性只有在依赖发生变化时才会重新求值模板只会遍历在售的商品,不会遍历每一个商品第二种方法的代码几乎是一样的之前:
//...5.将loop进入包装元素有时你可能想结合v-for和v-if来确定是否需要渲染一个列表。如果我们只想在用户登录时呈现产品列表怎么办?//错误代码
上面的代码有什么问题?和之前一样,vue模板会优先考虑v-for,所以会循环遍历每个元素,检查v-if。就算最后什么都不渲染,也要遍历几千个元素!更简单的解决方案是更改v-if语句在代码中的位置。//这样更好这样好多了,因为如果isLoggedIn为假,则根本不需要迭代。6.在循环中访问索引除了遍历数组和访问每个元素之外,您还可以跟踪每个项目的索引。为此,必须在我们的项目之后添加一个索引值。这非常简单,对于分页、显示列表索引、显示排名等非常有用。
Product#{{index}}:{{product.name}}
7.迭代对象到目前为止,我们只真正了解了使用v-for迭代数组。但是我们可以轻松地遍历对象的键值对。类似于访问元素的索引,我们必须向循环添加另一个值。使用单个参数遍历对象将遍历所有项目。如果我们再增加一个参数,我们将得到item和key。如果添加第三个,您还可以访问v-for循环的索引。假设要遍历商品的各个属性,代码应该是这样的: