请教一个关于 Vue.js 条件渲染与属性的问题

2016-10-10 13:31:32 +08:00
 ss098

现在有如下数据:

items: [
    {is_view: true}
    {is_view: false}
]

以及如下代码:

<div class="list">
    <div v-for="item in items">
        <div v-if="item['is_view']" class="list-item">
            <!--其他复杂的逻辑判断-->
        </div>
    </div>
</div>

我需要在 is_view 为 true 的情况下让 class 变为 .list-item .read ,所以用 v-else 。

<div class="list">
    <div v-for="item in items">
        <div v-if="item['is_view']" class="list-item read">
            <!--其他复杂的逻辑判断-->
        </div>
        <div v-else class="list-item">
            <!--其他复杂的逻辑判断-->
        </div>
    </div>
</div>

这会导致里面的逻辑重复出现两次, Vue.js 文档里提到的《 Class 与 Style 绑定》似乎需要在 data 中创建一个数据对象,但是我这里有一个列表,这可能就不太适用了。

请问大家,这个情况正确的解决方案是?

谢谢。

4001 次点击
所在节点    Vue.js
8 条回复
yangxiongguo
2016-10-10 14:08:43 +08:00
class={{item['is_view']?'classA':'classB'}}

大概这样可以吗?没实际跑过,就一个思路
mufeng
2016-10-10 14:11:42 +08:00
这样就好 :class="{'red': item.is_view}"
mufeng
2016-10-10 14:12:18 +08:00
@yangxiongguo 官方推荐 bind-class
MaiCong
2016-10-10 14:15:32 +08:00
:class="{'read': item.is_view === true}"
ss098
2016-10-10 14:19:36 +08:00
非常感谢各位菊苣,问题已经解决,代码如下:

<div v-bind:class="{'list-item read': item.is_view, 'list-item': !item.is_view">
----<!--其他复杂的逻辑判断-->
</div>

@yangxiongguo
@mufeng
@MaiCong
MaiCong
2016-10-10 20:49:35 +08:00
@ss098 去掉不必要的代码:

<div :class="{'list-item read': item.is_view>
----<!--其他复杂的逻辑判断-->
</div>
MaiCong
2016-10-10 20:50:34 +08:00
@ss098 手机打字,有点手抖
<div :class="{'read': item.is_view>
----<!--其他复杂的逻辑判断-->
</div>
MaiCong
2016-10-10 20:51:33 +08:00
=_=

<div :class="{'read': item.is_view}">
----<!--其他复杂的逻辑判断-->
</div>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/311606

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX