# san/no-use-s-if-with-s-for

禁止在与 s-for 相同的元素上使用 s-if

  • ⚙️ 此规则包含于 "plugin:san/essential", "plugin:san/strongly-recommended""plugin:san/recommended".

# 📖 规则细节

此规则目的是防止在同一元素上使用 s-for 指令和 s-if 指令。

有两种常见的情况可能会很常见:

  • 过滤列表中的项目(例如s-for="user in users" s-if="user.isActive")。 在这些情况下,用返回过滤列表的新计算属性替换"users"(例如"activeUsers")。
  • 为了避免在应该隐藏的情况下展示列表(例如s-for="user in users" s-if="shouldShowUsers")。 在这些情况下,将 s-if 移动到容器元素(例如 ulol)。
<template> <!-- ✓ GOOD --> <ul s-if="complete"> <todo-item s-for="todo in todos" todo="{{todo}}" /> </ul> <todo-item s-for="todo in shownTodos" todo="{{todo}}" /> <!-- ✗ BAD --> <todo-item s-if="complete" s-for="todo in todos" todo="{{todo}}" /><!-- ↑ In this case, the `s-if` should be written on the wrapper element. --> <todo-item s-for="todo in todos" s-if="todo.shown" todo="{{todo}}" /><!-- ↑ In this case, the `s-for` list variable should be replace with a computed property that returns your filtered list. --> </template>
Now loading...

# 🔧 配置

{
  "san/no-use-s-if-with-s-for": ["error", {
    "allowUsingIterationVar": false
  }]
}
  • allowUsingIterationVar (boolean) ... 使 s-if 指令能够使用由 s-for 指令定义的变量。 默认为false

# "allowUsingIterationVar": true

<template> <!-- ✓ GOOD --> <todo-item s-for="todo in todos" s-if="todo.shown" todo="{{todo}}" /> <!-- ✗ BAD --> <todo-item s-for="todo in todos" s-if="shown" todo="{{todo}}" /> </template>
Now loading...

# 🔍 实现