【问题标题】:Vue.js Toggle Class failsVue.js 切换类失败
【发布时间】:2019-11-30 20:43:30
【问题描述】:

我有一个项目列表 - 每个项目都有一个 isDefault 属性。 item.isDefault的初始值为false。

我有一个按钮,该按钮带有一个切换“isDefault”的方法 - 应该更改项目上的 css 类(字体很棒的类。加载了字体很棒的 css,并且该类在使用时可以工作在页面上作为静态 html)。

<div v-for="(item, index) in items">
  <button class="button" @click="toggleDefault(index)">
    <span class="icon is-small">
        <i class="fas" :class="item.isDefault ? 'fa-check' : 'fa-minus' "></i>
    </span>
    <span>is item default? {{item.isDefault}}</span>
  </button>
</div>

我的 toggleDefault 方法有效 - 我将项目索引传入,然后执行:

toggleDefault(i) {
    this.items[i].isDefault = !this.items[i].isDefault;
}

确实,我可以在开发工具和 html 中看到值从 true 变为 false,并且可以将更改记录到控制台...

但是 css 类没有改​​变。通过检查器查看,它仍然是“fa-minus”。我在其他地方使用相同的模式并且它有效?我在做傻事吗?

** 编辑 ** 添加了我的 JS - isDefault 在每个项目上定义... toggleDefault 切换值 - 但类仍然没有改变...

const app = new Vue({
    el: '#app',
    data: {
        items: [
            {
                name: 'foo',
                isDefault: false,
            },
            {
                name: 'bar',
                isDefault: false,
            }
        ],
    },
    methods: {
        toggleDefault(i) {
            this.items[i].isDefault = !this.items[i].isDefault;
        }
    }
})

【问题讨论】:

  • 检查是否有任何不相关的错误阻止您更新类,因为我复制了您的代码并且它有效,可以在检查器 html 中看到类的变化
  • items 在哪里以及如何定义?发生这种情况的唯一方法是,如果您的项目对象在其初始数据中实际上没有 isDefault 属性
  • 向按钮添加一个类 - 它改变了!但是图标上的类没有....

标签: vue.js


【解决方案1】:

发现问题....我正在使用 font-awesome SVG.... Font awesome 换掉了标签!标签不在那里,vue 无法在其上运行方法!

解决方案 - 将 font awesome 标签包装在 v-if 条件中......这感觉有点恶心,但它确实有效。

<button class="button" :class="item.isDefault ? 'is-primary' : 'is-white' " @click="toggleDefault(item)">
   <template  v-if="item.isDefault">
       <span class="icon is-small">
            <i class="fas fa-check"></i>
       </span>
   </template>
   <template  v-if="!item.isDefault">
       <span class="icon is-small">
             <i class="fas fa-minus"></i>
       </span>
   </template>
   <span>Set as Default</span>
</button>

【讨论】:

  • 好答案。我相信这将在未来对其他人派上用场。您应该将其标记为已接受的答案
  • 谢谢 - 刚刚检查过
猜你喜欢
  • 2018-02-27
  • 2015-09-14
  • 1970-01-01
  • 2017-10-01
  • 2016-04-21
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
相关资源
最近更新 更多