动态绑定多个属性

  1. <script setup>
  2. const objectOfAttrs = {
  3. id: 'container',
  4. class: 'wrapper'
  5. }
  6. </script>
  7. <div v-bind="objectOfAttrs"></div>

v-bind

  1. v-bind:class='xxx'

一般都是v-bind后面加属性,那么这个值就编程动态的了。
简写就是 :class

v-on

  1. v-on:click='xxx'

v-on:click是事件触发器,
简写就是@click

动态属性名

  1. <!--
  2. Note that there are some constraints to the argument expression,
  3. as explained in the "Dynamic Argument Value Constraints" and "Dynamic Argument Syntax Constraints" sections below.
  4. -->
  5. <a v-bind:[attributeName]="url"> ... </a>
  6. <!-- shorthand -->
  7. <a :[attributeName]="url"> ... </a>
  8. <a v-on:[eventName]="doSomething"> ... </a>
  9. <!-- shorthand -->
  10. <a @[eventName]="doSomething">

在本例中,当 eventName 的值为“focus”时,v-on:[eventName] 将等价于 v-on:focus。
就比如,我们定义了一个动态的事件,但我们不知道是点击还是鼠标经过,所以这边可以用动态的属性来定义。当它的值为null的时候就是移除了这个事件或者属性了

  1. <a :['foo' + bar]="value"> ... </a>

它也可以是组合形式的

事件修饰

image.png
后面加个点就是修饰的内容

reactive

  1. <template>
  2. <div>
  3. <button @click="add">{{num.first}}</button>
  4. </div>
  5. </template>
  6. <script setup>
  7. import {ref,reactive} from 'vue'
  8. const num=reactive({first:0})
  9. function add(){
  10. num.first++
  11. }
  12. </script>
  13. <style lang="scss" scoped>
  14. </style>

就是啥意思呢,比ref好,难道ref淘汰了?好奇怪
ref在进行操作的时候要num.value来改变本身的值,而reactive不用。
但是它要写成一个对象的形式,也是挺烦的

ref

  1. let num=ref(0)
  2. function add(){
  3. num.value++
  4. }

那这是普通的ref写法,用的时候要加.value
那我们可以这样定义就不用加value了。

  1. let num=$ref(0)
  2. function add(){
  3. num++
  4. }

computed

计算属性,这个其实和svelte的$反应性差不多,只要里面的值发生改变,就会计算一次,并返回,当时没有svelte的$厉害,那里面甚至可以执行任何代码。而且vue必须得在模板中用这个computed才行。

  1. <template>
  2. <div>
  3. <button @click="()=>{a++}">{{a}}</button>
  4. <p v-bind:style="acolor">{{acolor}}</p>
  5. </div>
  6. </template>
  7. <script setup>
  8. import {ref,reactive,computed} from 'vue'
  9. let a=ref(0)
  10. const acolor=computed(()=>{
  11. return `color:rgb(120,${a.value},120);`
  12. })
  13. </script>
  14. <style lang="scss" scoped>
  15. </style>

v-bind:class

  1. <div
  2. class="static"
  3. :class="{ active: isActive, 'text-danger': hasError }"
  4. ></div>
  5. <script setup>
  6. const isActive = ref(true)
  7. const hasError = ref(false)
  8. </script>

It will render:


一看就懂

v-show

  1. <h1 v-show="ok">Hello!</h1>

The difference is that an element with v-show will always be rendered and remain in the DOM; v-show only toggles the display CSS property of the element.
v-show doesn’t support the