问题描述
异常信息:[vue/no-use-v-if-with-v-for]
The 'this.$router.options.routers' expression inside 'v-for' directive should be replaced with a computed property that returns filtered array instead. You should not mix 'v-for' with 'v-if'.eslint-plugin-vue ,如下图:
原因分析:
error The ‘this.$router.options.routes’ expression inside ‘v-for’ directive should be replaced with a computed property that returns filtered array instead. You should not mix ‘v-for’ with ‘v-if’ vue/no-use-v-if-with-v-for
原因:v-for的优先级会高于v-if,因此v-if会重复运行在每个v-for中。
解决方法
将v-for用template标签进行包裹即可,因在该标签无特殊含义,代码如下:
<el-menu router>
<template v-for="(item,index) in this.$router.options.routers" >
<el-submenu index="1"
:key="index"
v-if="!item.hidden">
<template slot="title">
<i class="el-icon-location"></i>
<span>{{item.name}}</span>
</template>
<el-menu-item
:index="children.path"
v-for="(children,index) in item.children"
:key="index">{{children.name}}</el-menu-item>
</el-submenu>
</template>
</el-menu>
上面代码为vue/cli4中写法,貌似vue/cli3中可以直接像下面这样写:
<el-menu router>
<el-submenu index="1"
v-for="(item,index) in this.$router.options.routers"
:key="index"
v-if="!item.hidden">
<template slot="title">
<i class="el-icon-location"></i>
<span>{{item.name}}</span>
</template>
<el-menu-item
:index="children.path"
v-for="(children,index) in item.children"
:key="index">{{children.name}}</el-menu-item>
</el-submenu>