目录
我们可以给
:class
(v-bind:class
的缩写) 传递一个对象来动态切换 class:
<div :class="{ active: isActive }">div>
上面的语法表示
active
是否存在取决于数据属性isActive
的真假值。class可以赋不同名字
第一种方式内敛的方式
const isActive = ref(true) const hasError = ref(false) <div class="static" :class="{ active: isActive, 'text-danger': hasError }" >div> 渲染的结果 也就是html显示的 <div class="static active">div>当
isActive
或者hasError
改变时,class 列表会随之更新。举例来说,如果hasError
变为true
,class 列表也会变成"static active text-danger"
。第二种方式绑定的方式
const classObject = reactive({ active: true, 'text-danger': false }) class="classObject"> 这也会渲染出相同的结果。我们也可以绑定一个返回对象的计算属性。这是一个常见且很有用的技巧: const isActive = ref(true) const error = ref(null) const classObject = computed(() => ({ active: isActive.value && !error.value, 'text-danger': error.value && error.value.type === 'fatal' })) class="classObject">
我们可以给
:class
绑定一个数组来渲染多个 CSS class:
const activeClass = ref('active') const errorClass = ref('text-danger') class="[activeClass, errorClass]"> 渲染的结果是: class="active text-danger">如果你也想在数组中有条件地渲染某个 class,你可以使用三元表达式:
class="[isActive ? activeClass : '', errorClass]">
errorClass
会一直存在,但activeClass
只会在isActive
为真时才存在。
:style
支持绑定 JavaScript 对象值,对应的是 HTML 元素的 style 属性:
const activeColor = ref('red') const fontSize = ref(30) "{ color: activeColor, fontSize: fontSize + 'px' }">直接绑定
const styleObject = reactive({ color: 'red', fontSize: '13px' }) "styleObject">绑定数组
"[baseStyles, overridingStyles]">
2.1v-for
我们可以使用
v-for
指令基于一个数组来渲染一个列表。v-for
指令的值需要使用item in items
形式的特殊语法,其中items
是源数据的数组,而item
是迭代项的别名
const items = ref([{ message: 'Foo' }, { message: 'Bar' }])- for="item in items">
{{ item.message }} 在 v-for 块中可以完整地访问父作用域内的属性和变量。v-for 也支持使用可选的第二个参数表示当前项的位置索引。 const parentMessage = ref('Parent') const items = ref([{ message: 'Foo' }, { message: 'Bar' }])- for="(item, index) in items">
{{ parentMessage }} - {{ index }} - {{ item.message }}
2.2v-for
与对象可以通过提供第二个参数表示属性名 (例如 key):
index第三个参数表示位置索引:
import { reactive } from 'vue' const myObject = reactive({ title: 'How to do lists in Vue', author: 'Jane Doe', publishedAt: '2016-04-10' }) <template> <ul> <li v-for="(value, key, index) in myObject"> {{ index }}. {{ key }}: {{ value }} li> ul> template> 0. title: How to do lists in Vue 1. author: Jane Doe 2. publishedAt: 2016-04-102.3在
v-for
里使用范围值
v-for
可以直接接受一个整数值。在这种用例中,会将该模板基于1...n
的取值范围重复多次。template
<span v-for="n in 10">{{ n }}</span>
注意此处
n
的初值是从1
开始而非0
。