javascript - Vue2理解:class attribute

标签 javascript vue.js vuejs2

所以,我在看vue2教程,当我发现这段代码时,我不明白它为什么以及如何工作。

这是一种风格:

<style type="text/css">
    .is-loading { background: red }
</style>

和 html:

<div id="root">
<button :class="{ 'is-loading': isLoading }" @click="toggleClass"> Toggle Me</button>
</div>

和vue代码:

new Vue({
   el: '#root', 
   data: {
      isLocading: false
   },
   methods: {
        toggleClass: function(){
            this.isLoading = !this.isLoading;
        }
   }
});

现在,此代码在单击时切换按钮的类名,但我不明白的是 { 'is-loading': isLoading } 部分,它似乎不是三元运算符。

它到底在说什么?类名已经首先被提到为is-loading,但变量出现在它之后。

这不应该看起来像 { variable 吗? '类(class)' ? 'no-class' } 换句话说,变量不应该先出现,然后是类吗?

最佳答案

Vue.js 有能力运行 Javascript expressions within all data-binding areas .

这是在后台发生的一点 Vue.js 魔术,但您可以从本质上这样想它:

  1. Vue 在 class= 上看到 : 指定数据绑定(bind)
  2. Vue 查看 class= 属性中的内容,并看到以下内容:{ 'is-loading': isLoading }
  3. Vue 注意到它是一个对象,因此它遍历每个键/值对并对其求值,如果值(在本例中为 isLoading)为真,它添加键(is -loading) 到类属性,如果值为 false,则不加载。

Vue 可以在数据绑定(bind)语法中解释三元组,但这是 Vue 的内部魔力,它允许您轻松地为一个组件创建多个 UI 状态变体。

关于javascript - Vue2理解:class attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42259230/

相关文章:

css - 如何让文件上传Buefy组件x%宽高?

javascript - 如何使用 Sequelize 继续搜索数据库?

javascript - react native : Component rerender but props has not changed

javascript - jquery点击事件后的多个回调

vuejs2 - 如何为 v-treeview 添加右键单击事件以在 vuetify 中打开菜单?

vue.js - vue中输入失去焦点时如何执行函数

javascript - vue - 自定义 block - 语法高亮

javascript - 根据窗口大小更改 Prop 值

javascript - Vuejs 列表中 target/currentTarget 的替代方法

typescript - 使用脚本设置和 Typescript 禁用属性继承/设置组件选项