vue.js - Font Awesome 无法使用 vue 正确更新

标签 vue.js font-awesome bulma

我正在尝试使用 font-awesome 和 bulma 制作一个可点击的“星形”图标,在 Vue 中的常规样式和实体样式(fas 和 far)之间切换,为此我有以下组件:

<template>
    <span v-if="isStarred" class="icon starred config-icon clickable-text" @click="unstar">
        <i class="far fa-star" title="Unstar Ranking"/>
    </span>
    <span v-else class="icon unstarred config-icon clickable-text" @click="star">
        <i class="fas fa-star" title="Star Ranking"/>
    </span>
</template>

isStarred 正在正确更新,并且 span 元素正在相应更新。但是,在我完全重新加载页面之前,带有图标的 i 元素不会更新。

我能够使用 v-show 而不是 v-if 来完成这项工作,但我不明白为什么这不起作用。

最佳答案

Vue 尝试尽可能高效地渲染元素,经常重复使用它们而不是从头开始渲染。但这并不总是可取的,所以 Vue 提供了一种方式让你说,“这两个元素是完全独立的——不要重复使用它们。”添加具有唯一值的键属性:

<i class="far fa-star" title="Unstar Ranking" key="unstared"/>
...
<i class="fas fa-star" title="Star Ranking" key="stared"/>

现在,每次切换时,都会从头开始渲染这 i 个元素。

您还可以使用类绑定(bind)更新您的类:

<span v-if="isStarred" v-bind:class="{starred: isStarred, unstarred: !isStarred}" class="icon config-icon clickable-text" @click="toggleStar">
    <i v-bind:class="{far: isStarred, fas: !isStarred}" class="fa-star" v-bind:title="title"/>
</span>

关于vue.js - Font Awesome 无法使用 vue 正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50242913/

相关文章:

angular - ngClass 不适用于 Angular 5

html - 在悬停时更改带有文本的 FontAwesome 图标

input - 如何在事件发生后清除 Buefy 输入(VueJS)?

html - 如何阻止 Webpack-3 的 PurifyCSSPlugin 清理太多?

css - Bootstrap 4 navbar-brand 中没有显示很棒的字体

css - 使用 Bulma CSS 框架的轮播

vue.js - 查找 tsconfig.json 或 jsconfig.json 时出现 Vetur 错误

javascript - 在模板 Vue 中插入一个脚本标签

vue-component - 将全局变量应用于 Vuejs

javascript - 在其焦点区域外单击时弹出框不关闭