vue3-模板语法

88 阅读1分钟

模板语法

在script声明一个变量,可以直接在template使用,用法:{{变量名}}

<template>
  <div>
    <p>{{message}}</p>
    <p>{{message1+1}}</p>
    <p>{{message1==0 ? '等于0':'false不等于0'}}</p>
    <p>{{message1?'1=true':'0=false'}}</p>
    <p>{{message2.split('') }}</p>
  </div>
</template>

<script setup lang="ts">
//插值 mustache{{}}
const message="hello world"
//运算,条件运算
const message1:number=0 //0隐式转换是false
//操作api
const message2:string = "hello world"
//split把一个字符串分割成字符串数组
</script>

<style scoped>

</style>

指令

v-开头都是vue指令

v-text 显示文本

<template>
  <div v-text="message">
  </div>
</template>

<script setup lang="ts">
const message:string="v-text用来显示文本"
</script>

<style scoped>

</style>

v-html 把带有标签的字符串渲染成真正的HTML内容

<template>
  <div v-html="message">

  </div>
</template>

<script setup lang="ts">
const message:string="<div>把带有标签的字符串渲染成真正的HTML内容</div>"
</script>

<style scoped>

</style>

v-if 控制元素的显示隐藏(操作dom节点)

<template>
  <div v-html="message" v-if="flag">

  </div>
</template>

<script setup lang="ts">
const message:string="<div>把带有标签的字符串渲染成真正的HTML内容</div>"

const flag:boolean=false
</script>

<style scoped>

</style>

v-show 控制元素的显示隐藏 (操作display)

<template>
  <div v-html="message" v-show="flag">

  </div>
</template>

<script setup lang="ts">
const message:string="<div>把带有标签的字符串渲染成真正的HTML内容</div>"

const flag:boolean=false
</script>

<style scoped>

</style>

v-else-if

<template>
  <div>
     <div v-if="flag==A">A</div>
     <div v-else-if="flag==B">B</div>
     <div v-else-if="flag==C">C</div>
     <div v-else>D</div>
  </div>
</template>

<script setup lang="ts">
const message:string="<div>把带有标签的字符串渲染成真正的HTML内容</div>"

const flag:string="A"
</script>

<style scoped>

</style>

v-on 简写@给元素添加事件

<template>
  <div>
     <button v-on:click="clickTap">button</button>
     <button @click="clickTap">简写</button>
  </div>
</template>

<script setup lang="ts">
const clickTap=()=>{
  console.log("触发了点击事件");
}
</script>

<style>

</style>

v-bind 简写 :绑定元素的属性

绑定style

<template>
  <div v-bind:style="style1">
     v-bind绑定元素的属性
  </div>
</template>

<script setup lang="ts">
  type Style={
      color:string,
      height:string
  }
  const style1:Style={
    color:"blue",
    height:"300px"
  }
</script>

<style scoped>

</style>

绑定class

<template>
  <div>
     <div :class="['a','b']">
       red and solid
     </div>
     <p>--------------------------</p>
     <div :class="[flag?'a':'c']">
        red or blue
     </div>
     <p>--------------------------</p>
     <div :class="cls">
      red and solid
     </div>
  </div>
</template>

<script setup lang="ts">

const flag:boolean=true

type Cls={
  a:boolean,
  b:boolean
}
const cls:Cls={
  a:true,
  b:false
}
</script>

<style scoped>
.a{
  color:red;
}
.b{
  border:1px solid #ccc;
}
.c{
  color:blue;
}
</style>

v-for 遍历元素

<template>
  <div>
    <div :key="item" v-for="item in Arr">
      <p>元素:{{item}}</p>
    </div>
    <p>------------</p>
    <div :key="item" v-for="item in Arr1">
      <p>{{item.name}}</p>
      <p>{{item}}</p>
    </div>
  </div>
</template>

<script setup lang="ts">
const Arr:Array<number>=[1,2,3,4,5]
const Arr1:Array<any>=[{name:'1'},{name:'2'},{name:'3'}]
</script>

<style scoped>

</style>

v-model 双向绑定

ref定义响应式

<template>
	<div>
	<input v-model="message" type="text">
	<div>{{message}}</div>
	</div>
	</template>

	<script setup lang="ts">
	import {ref} from 'vue'
const message=ref('test')
	</script>

	<style>
	</style>