javascript - Vue FontAwesome 图标在计算上不会改变
问题描述
我想根据对话属性更改标题图标。
<a class="navbar-item" :title="$t('header.lock')" @click="makePrivate">
<i class="fas" :class="getLockClass"></i>
</a>
这是在计算属性内部:
isConversationPrivate() {
return !(Object.keys(this.conversation).length === 0 || this.conversation.user_id === null);
},
getLockClass() {
console.log(this.isConversationPrivate);
return this.isConversationPrivate ? 'fa-lock' : 'fa-unlock-alt';
}
所以发生的情况是,当您最初加载页面时,对话是空的,因此控制台日志会打印出来false
(不存在的对话)。
Axios 请求通过 ID 获取对话,它被检索(使用 Vuex)并在控制台中getLockClass
再次运行打印。true
即使发生了变化,课程也从未申请过。为什么它不起作用?
编辑:
我已经设法在这个例子中重现它:
<html lang="fr">
<body>
<div id="app">
<a @click="toggle">
<i class="fas" :class="this.lock ? 'fa-lock':'fa-unlock'"></i>
</a>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js"></script>
<script>
new Vue({
el : '#app',
data : {
lock: true
},
methods: {
toggle() {
console.log("here");
this.lock = !this.lock;
}
},
});
</script>
</body>
</html>
解决方案
问题是您使用的是 FontAwesome 库,该库将注释掉<i>
元素并将其替换为<svg>
. 如果您检查浏览器中的元素,则可以检查这一点。FontAwesome 建议您vue-fontawesome
出于该原因和其他原因使用:https ://fontawesome.com/how-to-use/on-the-web/using-with/vuejs
另一种解决方案是将<i>
另一个元素(如跨度)包装在内部:
<span v-show="lock"><i class="fas fa-lock"/></span>
<span v-show="!lock"><i class="fas fa-unlock"/></span>
推荐阅读
- android-recyclerview - 分页库在 recyclerview 中没有显示任何内容
- django - 如何访问 django 中存储的用户数据?
- mongodb - 查询作为搜索值的子字符串的字段值
- php - 当用户通过雅虎应用程序登录时从雅虎获取用户电子邮件
- java - 是否可以在 Java 中调用 .NET Core 应用程序?
- c# - 如何在 C# 中的多列 ListView 中导入学生列表?
- python - 后台运行python,需要先接受用户输入
- encryption - 在 oracle 中加密和解密有困难
- android - 如何将 TextEdit 字段的输入保存到字符串中?
- assembly - 在 linux 中组装这段代码会给我语法错误