html - vue.js / v-for:如何根据列表索引设置 html 样式
问题描述
我有一个列表,我想根据它们的索引以不同的方式设置项目的样式:
<ul>
<li
v-for="(item, index) in myList()"
:key="index">{{item}}
</li>
</ul>
如果item
达到索引 4 和 5,我希望它是<strong>
. 我该如何使用v-if
或indexof
在这种情况下以正确的方式使用?
或者在这种情况下我应该使用动态类吗?
解决方案
做这件事有很多种方法:
style
1.给属性绑定一个返回对象的方法
您可以通过将<li>
元素的style
属性绑定到接受其索引的方法来做到这一点。在该方法中,您返回一个CSSStyleDeclaration
合适的对象。例如,如果i
是 4 或 5,则设置fontWeight
为粗体:
new Vue({
el: '#app',
methods: {
myList: function() {
return ['Lorem', 'Ipsum', 'Dolor', 'Sit', 'Amet', 'Foo', 'Bar', 'Baz'];
},
listItemStyle: function(i) {
var style = {};
if (i === 4 || i === 5) {
style.fontWeight = 'bold';
}
return style;
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<ul>
<li
v-for="(item, index) in myList()"
:style="listItemStyle(index)"
:key="index">
{{item}}
</li>
</ul>
</div>
2.<component>
用于确定是否<strong>
应呈现标签
这不是我的首选方法,因为我个人更喜欢绑定样式,而不是使用 DOM 元素指定外观。但是,如果您想使用<strong>
而不是设置font-weight: bold
,您可以简单地使用该<component is="[tag]">
方法来决定要在适当位置呈现哪个 HTML 标记:
new Vue({
el: '#app',
methods: {
myList: function() {
return ['Lorem', 'Ipsum', 'Dolor', 'Sit', 'Amet', 'Foo', 'Bar', 'Baz'];
},
tag: function(i) {
if (i === 4 || i === 5) {
return 'strong';
}
return 'span';
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<ul>
<li
v-for="(item, index) in myList()"
:key="index">
<component v-bind:is="tag(index)">
{{item}}
</component>
</li>
</ul>
</div>
推荐阅读
- python - 在python中将元数据从一个mp4文件复制到另一个文件
- cmake - Clion Remote - 是否可以创建远程工具链并将其应用于项目?
- angular - 如何指定角度服务注入策略?
- mysql - ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的认证协议;考虑在 Visual Studio 代码上升级 MySQL 客户端
- android - Android 中的 API 21 下方未显示工具栏
- html - Joomla 3.x,样式弹出消息
- python - 根据某些值对字典中的值求和
- unity3d - 如何在使用 Agora API 接收原始音频数据的同时静音本地音频播放?
- c++ - arr[n] 是否在 C++ 中打印数组的长度?
- reactjs - 如何在地图上使用 react-semantic-ui transition.group