首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:class=“``level ${file.invalidMessage && 'has-text-danger'}`”是如何崩溃的?

:class=“``level ${file.invalidMessage && 'has-text-danger'}`”是如何崩溃的?
EN

Stack Overflow用户
提问于 2020-07-25 23:10:06
回答 1查看 37关注 0票数 0

我正在使用VueJS和Express服务器跟随this tutorial上传文件,我遇到了一行我不理解的代码。

在8:19,我们被介绍给:class="`level ${file.invalidMessage && 'has-text-danger'}`"。我在Vue documentation中找不到任何类似的东西。

视频示例:

代码语言:javascript
复制
<div v-for="(file, index) in files" :key="index"
:class="`level ${file.invalidMessage && 'has-text-danger'}`"
>

</div>

Vue文档:

代码语言:javascript
复制
<div v-bind:class="{ active: isActive }"></div>
<div
  class="static"
  v-bind:class="{ active: isActive, 'text-danger': hasError }"
></div>
<div v-bind:class="classObject"></div>
<div v-bind:class="[activeClass, errorClass]"></div>
<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
<div v-bind:class="[{ active: isActive }, errorClass]"></div>

在Vue文档中没有类似于这种奇怪的语法。

我知道后引号内的${}是用来做什么的(模板文字)。

我知道代码的目的是什么,我已经对它进行了测试和工作,但我不知道它是如何工作的,以及使用了哪些快捷方式。

有人能“翻译”这行代码吗?

EN

回答 1

Stack Overflow用户

发布于 2020-07-26 03:42:24

Vue中的:class绑定接受字符串:

代码语言:javascript
复制
new Vue({
  el: "#app",
  computed: {
    classlist() {
      return this.classes.join(' ')
    }
  },
  data() {
    return {
      classes: [
        'first-class',
        'second-class'
      ],
      domClassList: null
    }
  },
  mounted() {
    // getting and setting the classlist of the DOM element
    this.domClassList = document.getElementById('classList').getAttribute('class')
  }
})
代码语言:javascript
复制
.level {
  background: green;
  padding: 15px;
}

.first-class {
  color: white;
}

.second-class {
  font-weight: 700;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <div id="classList" :class="`level ${ classlist }`">
    CLASSES ADDED AS STRINGS
  </div>
  <div>Classes: {{ domClassList }}</div>
</div>

正如您在上面的代码片段中看到的,这些类是由一个level和在computed属性(classlist)中返回的Vue data变量( classes数组)的连接组成的。

问题的另一部分是条件格式:

代码语言:javascript
复制
new Vue({
  el: "#app",
  computed: {
    classlist() {
      return this.classes.join(' ')
    }
  },
  data() {
    return {
      firstOperand: true,
      classes: [
        'first-class',
        'second-class'
      ],
      domClassList: null
    }
  },
  methods: {
    setDomClassList() {
      // getting and setting the classlist of the DOM element
      this.domClassList = document.getElementById('classList').getAttribute('class')
    },
    toggleOperand() {
      this.firstOperand = !this.firstOperand
      // this.$nextTick is required so Vue can set the data
      // values before we read it from the DOM
      const self = this
      this.$nextTick(function() {
        self.setDomClassList()
      })
    }
  },
  mounted() {
    this.setDomClassList()
  }
})
代码语言:javascript
复制
.level {
  background: green;
  padding: 15px;
}

.first-class {
  color: white;
}

.second-class {
  font-weight: 700;
}


/* this class is set so you can see the difference on
   toggling the firstOperand variable
*/

.false {
  font-style: italic
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <div id="classList" :class="`level ${ firstOperand && classlist }`">
    CLASSES ADDED AS STRINGS
  </div>
  <div>Classes: {{ domClassList }}</div>
  <hr />
  <div>
    FIRSTOPERAND IS {{ firstOperand }}<br />
    <button @click="toggleOperand">TOGGLE FIRSTOPERAND TO {{ !firstOperand }}</button>
  </div>
</div>

第二个代码段与第一个代码段几乎相同,只是引入了&&。我还创建了一个.false CSS值,以便您可以看到返回的false

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63089950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档