You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于v-for中v-bind绑定class与id的语法疑问

Vue 动态绑定语法疑问解答

示例代码

CSS

.fav { background:"blue"}

HTML

<li
  v-for="(book, index) in books"
  :key="book.title"
  :id="this.code + '-' + index"
  :class="{fav: book.isFav}"
>
  {{book.title}} - {{index}}
</li>

JavaScript

data() {
  return {
    code: "N54234",
    books: [
      { title: "the final empire", isFav: true },
      { title: "the test empire", isFav: false },
      { title: "the first empire", isFav: true },
    ],
  };
}

疑问解答

先纠正一个误解::class="{fav: book.isFav}"里的{}不是分组符号,也和三元运算符无关,这是Vue动态class绑定的对象语法——意思是当book.isFav为true时,给当前元素添加fav类名,反之则不添加。

1. 为什么:id="this.code + '-' + index"不需要使用{}?

Vue中:是v-bind的简写,用来把属性值绑定到JavaScript表达式。这里的this.code + '-' + index是一个字符串拼接表达式,直接返回一个字符串作为id的值,完全符合v-bind的语法要求,不需要额外用{}包裹。

而:class里的{}是Vue专门支持的特殊语法,属于class绑定的专属用法,和普通属性绑定的逻辑完全不同。

2. 改成:id="{this.code+'-'+index}"报错的原因?

当你给:id写{this.code+'-'+index}时,Vue会把这个{}解析成对象字面量,但对象的键必须是合法的标识符(比如fav)或者用引号包裹的字符串,而this.code+'-'+index是一个动态表达式,不能直接作为对象的键,这就触发了语法解析错误,控制台才会提示Unexpected token '.'。

另外补充:Vue模板里的表达式默认上下文就是组件实例,其实不需要写this.,直接写code + '-' + index就能正常工作。

内容的提问来源于stack exchange,提问作者glasseye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:33:26