当前位置:首页 » 《关于电脑》 » 正文

教程3 Vue3条件渲染指令(v-if、v-else、v-else-if、v-show、v-for)

22 人参与  2024年04月09日 14:08  分类 : 《关于电脑》  评论

点击全文阅读


一、新建项目

1、使用Vite创建Vue Typescript 项目(conditional-rendering )

npm create vite@latest 

2、文件结构

在这里插入图片描述

3、运行

cd conditional-renderingnpm installnpm run dev

二、条件渲染指令

1、v-if

v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真值时才被渲染。

2、v-else

可以使用 v-else 为 v-if 添加一个“else 区块”。

3、v-else-if

v-else-if 提供的是相应于 v-if 的“else if 区块”。它可以连续多次重复使用。

4、v-show

可以用来按条件显示一个元素的指令是 v-show。

5、v-for

三、案例

1、案例 显示当前库存状态

v-if、v-else、v-else-if他们是把多余的dom节点去除(不是none),下面这个案例使用这三个指令完成。

(1)运行效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)HelloWorld.vue参考源码

<template>  <div id="app">    <input type="text" v-model="stock"/>    <p v-if='stock > 10'>库存为{{ stock }}</p>    <p v-else-if='0 < stock && stock <= 5'>商品即将售馨</p>    <p v-else>暂时没有库存</p>  </div></template><script setup lang="ts">import { ref } from "vue";const stock = ref(0)</script>

2、案例 根据条件显示不同的template标签

既想使用一个标签包裹需要需要的标签,又不想显示包裹标签,可以使用template标签
v-if == true显示
v-if == false隐藏

(1)案例要求:点击按钮,改变显示的template标签。

(2)运行效果

在这里插入图片描述

在这里插入图片描述

(3)参考代码

<template>  <div id="app">    <template v-if="flag">      <h1 style="color:red">你真美</h1>    </template>    <template v-else>      <input type="text" value="你真帅" style=" font-size:36px;color:blue; font-weight: 900;text-align: center;"/>      <br><br>    </template>    <button @click="changeFlag">修改</button>  </div></template>    <script setup lang="ts">import { ref } from "vue";const flag = ref(true)function changeFlag() {  flag.value = !flag.value}</script>

3、案例 显示和隐藏dom节点

v-show == true 把dom节点显示
v-show == false 把dom节点隐藏(display:none)

(1)案例要求:点击按钮,显示或隐藏h1标签。

(2)运行效果

在这里插入图片描述
在这里插入图片描述

(3)参考代码

<template>  <div id="app">    <p v-show="isShow">我会隐身</p>    <button @click="isShow = !isShow">点击显示隐藏</button>  </div></template>    <script setup lang="ts">import { ref, watch } from "vue"const isShow = ref(true)</script>

4、案例 使用v-for显示专业列表

(1)运行效果

在这里插入图片描述

(2)参考代码

<template>  <div id="app">    <ul>      <li v-for='item in majors'>{{ item }}</li>    </ul>  </div></template>    <script setup lang="ts">const majors = ['计算机科学与技术', '数字媒体技术', '物联网工程', '软件工程', '网络工程', '人工智能']</script><style>ul {  list-style: none;}li {  list-style-type: square;  list-style-position: outside;  text-align: left;  font-size: large;  padding: 5px;}</style>

5、案例 使用v-for循环数字和字符

(1)运行效果

在这里插入图片描述

(2)参考代码

<template>  <div id="app">    <ul>      <li v-for="num in 5">{{ num }}</li>    </ul>    <p v-for="str in 'computer'">{{ str }}</p>  </div></template>   

6、案例 使用v-for显示专业列表

(1)运行效果

在这里插入图片描述

(2)参考代码

<template>  <el-select v-model="value" class="m-2" placeholder="Select" size="large">    <el-option v-for="item in majors" :key="item.value" :label="item.label" :value="item.value" />  </el-select></template><script lang="ts" setup>import { ref } from 'vue'// const value = ref('')const value = ref('1')const majors = [  {    value: '1',    label: '计算机科学与技术',  },  {    value: '2',    label: '数字媒体技术',  },  {    value: '3',    label: '物联网工程',  },  {    value: '4',    label: '人工智能',  },  {    value: '5',    label: '软件工程',  },]</script>

7、案例 使用v-for完成todos案例

在这里插入图片描述
在这里插入图片描述

<script setup lang="ts">import { ref, reactive } from 'vue'const  id = ref(0)const  newTodo = ref('')// reactive作用:定义一个对象类型的响应式数据(基本数据类型用ref函数)const  todos = reactive([  { id: id.value++, text: '番茄炒蛋' },  { id: id.value++, text: '醋溜土豆丝' },  { id: id.value++, text: '香菇炒肉' }])function addTodo() {  todos.push({ id: id.value++, text: newTodo.value })  newTodo.value = ''}function removeTodo(index: number) {  todos.splice(index, 1);}</script><template>  <!-- @submit.prevent .prevent 表示提交以后不刷新页面, -->  <form @submit.prevent="addTodo">    <input v-model="newTodo" />    <button>Add Todo</button>  </form>  <ul>    <li v-for="(todo, index)  in todos" :key="todo.id">      {{ todo.text }}      <button @click="removeTodo(index)">删除</button>    </li>  </ul></template>

8、案例 使用v-for表格中显示对象数组

(1)运行效果

在这里插入图片描述

(2)参考代码

<template>  <table>    <tr>      <th>班级</th>      <th>姓名</th>      <th>性别</th>      <th>年龄</th>    </tr>    <tr v-for="(item,index ) in students" :key="index">      <td>{{ item.grade }}</td>      <td>{{ item.name }}</td>      <td>{{ item.gender }}</td>      <td>{{ item.age }}</td>      <button v-on:click="del(index)">删除</button>      <td></td>    </tr>  </table>  <button @click="add">添加</button></template><script lang="ts" setup>import { ref } from "vue";let counter = 3interface Student {  grade: number  name: string  gender: string  age: number}let students = ref<Student[]>([{  grade: 1,  name: '张三',  gender: '男',  age: 20}, {  grade: 2,  name: '李四',  gender: '女',  age: 21}]);function add() {  var student = {    grade: counter++,    name: '新人',    gender: '女',    age: 18  }  students.value.push(student);}function del(index: number) {  students.value.splice(index, 1);}</script>

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/92745.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 鹿雪附加完整在线阅读(小祖宗她带着双宝闹翻天)最近更新列表
  • 你要战功我给你,妖兽入侵你哭啥高质量好文叶天凌筱完本_你要战功我给你,妖兽入侵你哭啥高质量好文(叶天凌筱)
  • 夫君和小三霸占了我的将军府,我杀疯了阅读_雪儿谭绍木兰全集_小说后续在线阅读_无删减免费完结_
  • 鹿溪小说(鹿溪)终章+番外(穿进恐怖游戏后,我和反派HE了)一口气阅读
  • 完结文留给儿子的副卡月月刷爆,他却因睡桥底被送进收容所列表_完结文留给儿子的副卡月月刷爆,他却因睡桥底被送进收容所(娄墨霆宋佑轩)
  • 你活着,却死在我等你的第三年后续+番外_谨言佳佳温以宁全集_小说后续在线阅读_无删减免费完结_
  • 相思溺于夏时雨小说(裴景澈初念可)章节目录+起始篇章(相思溺于夏时雨)全章无套路在线
  • 未婚夫重生归来叫停手术,把剥开肚子的我困在手术台上40分钟(裴临渊阮离歌)
  • 完结文离婚是你提,净身出户你又哭什么精彩分享列表_完结文离婚是你提,净身出户你又哭什么精彩分享(苏铭余素伊)
  • 全书浏览哥哥重生救我,我带队灭了组织!(陈致远陈知韫)_哥哥重生救我,我带队灭了组织!(陈致远陈知韫)全书结局
  • 全文算命赚功德,我直接飞升成仙(楚天河林风)列表_全文算命赚功德,我直接飞升成仙
  • 八零丈夫抛妻弃子后悔不当初完整文本_顾尧全文_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1