一.Vue中的条件渲染

news2025/2/25 9:09:29

1.在<head>中引用

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

2.在<body>中写入

<div id="app">
        <p>
            <a v-if ="user.username=='admin'"href="#">编辑</a>
            <a v-if="user.username!='guest'" href="#">详情</a>
        </p>
        <p>
            <a v-if ="user.username=='admin'"href="#">编辑</a>
            <a v-else href="#">详情</a>
        </p>
        <p>
            <a v-show ="user.username=='admin'"href="#">编辑</a>
            <a v-show="user.username!='admin'" href="#">详情</a>
        </p>
        <p>
            <button type="button" @click="change">切换成Guest</button>
        </p>
    </div>

3.在script中写入

<script>
        const {createApp} = Vue
        createApp({
            data(){
                return {
                    user:{
                        username:'admin'
                    }
                }
            },
            methods:{
                change:function(event){
                    if(this.user.username == 'admin'){
                        this.user.username = 'guest'
                        event.target.innerHTML = '切换成Admin'
                    }else{
                        this.user.username = 'admin'
                        event.target.innerHTML = '切换成Guest'
                    }
                }
            }        
        }).mount('#app')
 </script>

(1)v-if

  • 用途:根据表达式的真假值来条件性地渲染一个元素。
  • 行为:如果表达式的值为真,则渲染元素及其内容;如果为假,则不渲染。v-if 有“惰性”渲染的特性,即在条件首次评估为假时,元素及其绑定的数据都不会被创建或渲染;当条件变为真时,才会开始渲染。
  • 适用场景:适用于条件渲染,且条件在初始渲染时不太可能改变的情况,或者条件改变时涉及大量 DOM 操作的情况。

    (2)v-show

      用途:根据表达式的真假值来显示或隐藏一个元素。

    • 行为:无论表达式的值是真还是假,元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS display 属性。
    • 适用场景:适用于需要频繁切换显示/隐藏状态,且切换代价较小的情况,因为元素始终保留在 DOM 中,只是简单地切换可见性。

     (3)v-for

    • 用途:基于源数据多次渲染元素或模板块。
    • 行为v-for 指令需要以特殊语法 item in items 的形式来使用,其中 items 是源数据数组或对象,item 是被迭代的数组元素或对象的值。v-for 还支持一个可选的第二个参数,即当前项的索引或键名。
    • 适用场景:适用于需要渲染列表或集合的情况,如用户列表、商品列表等

    二.列表渲染

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>列表渲染</title>
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app">
            <ul>
                <li v-for="(u,index) in users">
                   {{index}}_{{u.id}}_{{u.name}}_{{u.age}}
                </li>
            </ul>
        </div>
        <script>
            const {createApp} = Vue
            createApp({
                data(){
                    return {
                        users:[
                            {id:1,name:'zhangsan',age:18},
                            {id:2,name:'lisi',age:19},
                            {id:3,name:'wangwu',age:20},
                        ]
                    }
                },
                methods:{
                    
                }        
            }).mount('#app')
        </script>
    </body>
    </html>

    三.ref属性-此写法只适合Vue2

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>ref属性-此写法只适合Vue2</title>
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app">
            <p>
                <input type="text" value="admin" ref="username">
                <input type="button" value="获取用户名称" @click="getUsername">
            </p>
        </div>
        <script>
            
            const {createApp} = Vue
            
            createApp({
                data(){
                    return {
                                        
                            
                        
    
                    }
                        
                        
                        
                    },
                methods:{
                    getUsername(){
                        alert(this.$refs.username.value)
                    }
                }        
                
                
            }).mount('#app')
        </script>
    </body>
    </html>

    ref和refs的区别:

            

    1. ref

      • “ref”用于给元素或子组件注册引用信息。
      • 当“ref”应用于普通DOM元素时,引用指向的是该DOM元素;而当应用于子组件时,引用则指向组件实例。
      • 通过“ref”,开发者可以在父组件中方便地访问和操作这些被标记的元素或组件。
    2. refs

      • 在Vue.js等框架中,“$refs”是一个对象,用于存储所有通过“ref”属性注册的引用信息。
      • 可以通过“refs”轻松访问和操作这些被标记的元素或组件。例如,“this.refs.myElement”可以访问名为“myElement”的DOM元素或子组件实例。

    代码效果:

    四.计算属性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>计算属性</title>
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app">
            姓:<input type="text" v-model="firstName1">
            名:<input type="text" v-model="lastName1">
            姓名:<input type="text" v-model="username1">
            <br><br>
            姓:<input type="text" v-model="firstName2">
            名:<input type="text" v-model="lastName2">
            姓名:<input type="text" v-model="username2">
        </div>
        <script>
            
            const {createApp} = Vue
            
            createApp({
                data(){
                    return {
                         firstName1:'',
                         lastName1:'',    
                         firstName2:'',
                         lastName2:''              
                    }        
                        
                },
                
                methods:{
                    
                },
                computed:{
                    //在computed属性对象中定义计算属性的方法,用于对数据进行计算操作
                    //通过getter和setter实现对属性数据的显示进行监控
                    username1:function(){
                        return this.firstName1+'' + this.lastName1
                    },
                    username2:{
                       get:function(){
                           return this.firstName2+''+ this.lastName2
                        },
                       set:function(val){
                           let strs=val.split(' ')
                           this.firstName2=strs[0]
                           this.lastName2=strs[1]
                        }
                    }        
                }    
                
            }).mount('#app')
        </script>
    </body>
    </html>

    代码效果:

    五.监听属性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>监听属性</title>
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app">
            姓:<input type="text" v-model="firstName">
            名:<input type="text" v-model="lastName">
            姓名:<input type="text" v-model="username">
        </div>
        <script>
            const {createApp} = Vue
            createApp({
                data(){
                    return {
                        firstName:'',
                        lastName:'',
                        username:''           
                    }        
                        
                },
                watch:{
                    //通过Vue对象的$watch方法监听属性或watched的配置来监听指定属性
                    //当属性变化时,回调函数自动调用,在函数内部进行计算
                    username:function(newVal,oldVal){
                        if(newVal!=''){
                            let strs=newVal.split(' ')
                            this.firstName=strs[0]
                            this.lastName=strs[1]
                        }else{
                            this.firstName=''
                            this.lastName=''
                        }
                    },
                    firstName:function(){
                        this.username=this.firstName+' '+this.lastName
                    },
                    lastName:function(){
                        this.username=this.firstName+' '+this.lastName
                    }
                }
            }).mount("#app")
        </script>
    </body>
    </html>

    六.更新购买数量

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>更新购买数量</title>
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app">
            <button type="button" @click="sub">-</button>
            <input type="text" v-model="number" style="width: 50px; text-align: center;">
            <button type="button" @click="add">+</button>
        </div>
        <script>
            
            const {createApp} = Vue
            
            createApp({
                data(){
                    return {
                        number:1      
                    }        
                        
                },
                methods:{
                    add(){
                       if(this.number<10){
                           this.number++
                       } 
                    },
                    sub(){ 
                        if(this.number>1){
                            this.number--
                        }
                    }
                }
                
                
            }).mount('#app')
        </script>
    </body>
    </html>

    七.图片的切换

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>图片切换</title>
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
        <style>
            #box{
                width: 960px;
                height: 540px;
                margin:50px auto;
                border-top:10px solid #ccc;
                border-left:10px solid #ccc;
                border-right:10px solid #666;
                border-bottom:10px solid #666;
                padding:5px;
            }
            .btnLeft{
                width:100px;
                font-size:40px;
                color:#000;
                position: relative;
                top:-310px;
                left:0px;
                opacity:0.2;
                display:inline-block;
                cursor: pointer;
            }
            .btnRight{
                width:100px;
                font-size:40px;
                color:#000;
                position: relative;
                top:-310px;
                right:-820px;
                opacity:0.2;
                display:inline-block;
                cursor: pointer;
            }
            img{
                width:960px;
                height:540px;
            }
            
        </style>
    </head>
    <body>
        <div id="app">
            <div id="box">
                <img :src="images[currentIndex]">
                <div class="btnLeft" @click="left">《</div>
                <div class="btnRight" @click="right">》</div>
            </div>
        </div>
        <script>
            const {createApp} = Vue
            createApp({
                data(){
                    return {
                         images:[
                            'images/1.jpg',
                            'images/2.jpg',
                            'images/3.jpg',
                         ],
                         currentIndex:0  
                    }        
                        
                },
                methods:{
                    left(){
                        if(this.currentIndex>0)
                        {
                            this.currentIndex--;
                        }
                    },
                    right(){
                        if(this.currentIndex<this.images.length-1)
                        {
                            this.currentIndex++;
                        }
                    }
                    
                }
                
                
            }).mount('#app')
        </script>
    </body>
    </html>

    八.全选/全部选

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>全选/全不选</title>
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app">
            <p>
                <input type="checkbox" v-model="checkedAll" @click="choose">全选/全不选
            </p>
            <p>
                <span v-for="item in hobbys">
                    <input type="checkbox" v-model="ids" :value="item.id">{{item.title}}
    
                </span>
            </p>
        </div>
        <script>
            const {createApp} = Vue
            createApp({
                data(){
                    return {
                         hobbys:[
                            {id:1,title:'运动'},
                            {id:2,title:'音乐'},
                            {id:3,title:'美术'},
                            {id:4,title:'学习'},
                            
                         ],
                         ids:[
    
                         ],//爱好是否勾选
                         checkedAll:false //是否全选,默认false
                    }        
                        
                },
                methods:{
                    choose(){
                        if(this.checkedAll==true){
                            this.ids=[]
                            
                        }else{
                            this.hobbys.forEach(item=>{
                                this.ids.push(item.id)
                            })
                        }
                    }                
                },
                watch:{
                    ids:function(){
                        if(this.ids.length==this.hobbys.length){
                            this.checkedAll=true
                        }else{
                            this.checkedAll=false
                        }
                    }
                }
                
                
            }).mount('#app')
        </script>
    </body>
    </html>

    九.Vue综合案例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        
        <style>
            * { margin: 0px; padding: 0px }
            h1 { text-align: center; width: 600px; margin: 100px auto 10px auto; }
            #box { width: 600px; margin: 0px auto; border: solid #ccc 1px; }
            #box input { width: 530px; border: 0px; padding: 10px 5px; font-size: 20px }
            #box ul { border-top: solid 1px #ccc;list-style: none;padding: 10px 5px; }
            #box ul li { font-size: 18px;line-height: 35px; }
            .left { float: left;color: #999;cursor: pointer }
            .right { float: right;color: #999;cursor: pointer }
            .clearfix:after, .clearfix:before { content: ""; display: table; clear: both; }
            .remove { color: #999;float: right;cursor: pointer;font-size: 20px; }
            #btn { width: 60px;height: 44px;border: 0px;cursor: pointer; }
        </style>
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app">
            <h1>我的记事本</h1>
            <div id="box">
                <div>
                    <input type="text" v-model="record" placeholder="请填写您的记事信息">
                    <button id="btn" type="button" @click="save">添加</button>
                </div>
                <ul class="clearfix">
                    <li v-for="(item,index) in records" style="border-bottom: dotted 1px #ccc">
                        <span @click="modify(index)" style="cursor: pointer">{{index+1}}.{{item.content}}</span>
                        <span @click="remove(index)" class="remove" >&nbsp;x&nbsp;</span>
                    </li>
                    <li>
                        <span class="left">Total {{records.length}} Records</span>
                        <span class="right" @click="removeAll()">Remove All</span>
                    </li>
                </ul>
            </div>
        </div>
        <script>
            const {createApp} = Vue
            createApp({
                data: function () {
                    return {
                        records:[//记录记事本列表
                            {id:1,content:'今日记事,晚上跑步!'},
                            {id:1,content:'今日记事,晚上复习2小时!'},
                        ],
                        record:'',//记录事项
                        currentId:3,//当前事项最大id
                        motifyId:0//修改事项Id
                    }
                },
                methods:{
                    save(){//添加事项
                        if(this.record===''){
                            alert("请填写要记事的内容")
                        }else{
                            if(this.motifyId===0){//如果修改id等于0则表示添加新的记事内容
                                this.records.push({id:this.currentId,content:this.record})
                                this.currentId++
                            }else{
                                //修改事项
                                //循环获得记事本中每一个事项,寻找到要修改的事项并覆盖内容
                                for(let i=0;i<this.records.length;i++){
                                    if(this.records[i].id===this.motifyId){
                                        this.records[i].content=this.record
                                    }
                                }
                            }
                            this.record=''//清空输入框内容
                        }
    
                    },
                    modify(index){
                        let record=this.records[index]
                        this.record=record.content
                        this.motifyid=record.id
                    },
                    remove(index){
                        this.records.splice(index,1)//splice函数用于删除数组中的元素,参数1要删除元素的下标数,参数2删除几条数据
                    },
                    removeAll(){
                        this.records=[]//清空记录列表
                        this.modifyId=0//清空修改id
                        this.currentId=3//清空当前id
                    }
            
            }}).mount('#app')
        </script>
    </body>
    </html>

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2304805.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    IO进程 day05

    IO进程 day05 9. 进程9. 9. 守护进程守护进程的特点守护进程创建步骤 10. 线程10.1. 线程的概念10.2. 进程和线程的区别10.2. 线程资源10.3. 线程的函数接口1. pthread_create-创建线程线程函数和普通函数的区别 2. pthread_exit3.线程资源回收函数join和detach的区别 获取线程…

    【HeadFirst系列之HeadFirstJava】第6天之认识Java的API:解锁高效开发的钥匙

    认识Java的API&#xff1a;解锁高效开发的钥匙 在《Head First Java》的第六章节中&#xff0c;作者深入探讨了Java的API&#xff08;Application Programming Interface&#xff09;&#xff0c;并强调了它在Java开发中的重要性。Java API 是Java开发工具包&#xff08;JDK&a…

    4 - AXI GPIO按键控制LED实验

    文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验任务是通过调用PL端AXI GPIO IP核&#xff0c;使用中断机制&#xff0c;实现PL端按键控制 PS端LED的功能。 2 系统框图 3 软件设计 注意事项&#xff1a; AXI GPIO IP核是双沿触发中断&#xff0c;不可设置&…

    题海拾贝:扫雷

    Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

    Deepseek本地部署小实践(c盘)

    目录 前言 一、安装ollama 二、打开终端执行run 三、可视化 前言 小鲸鱼出来以后看到很多大佬本地部署AI&#xff0c;自己也想试一试&#xff0c;第一次部署AI&#xff0c;选了一个简单的办法&#xff0c;实践一下&#xff0c;写得比较粗糙。 一、安装ollama 先简单的介绍…

    详细解析d3dx9_27.dll丢失怎么办?如何快速修复d3dx9_27.dll

    运行程序时提示“d3dx9_27.dll文件缺失”&#xff0c;通常由DirectX组件损坏或文件丢失引起。此问题可通过系统化修复方法解决&#xff0c;无需重装系统或软件。下文将详细说明具体步骤及注意事项。 一.d3dx9_27.dll缺失问题的本质解析 当系统提示“d3dx9_27.dll丢失”时&…

    【LeetCode刷题之路】leetcode155.最小栈

    LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…

    Vue全局变量的定义和使用,创建 Store变量、读取、修改

    在VUE中&#xff0c;当需要各js、各页面都能读写的全局变量时&#xff0c;可以用store变量&#xff0c;从定义到使用的方法如下 一&#xff0e;定义变量&#xff0c;例&#xff1a;我们定一个全局变量gxh 找到 vue的/ src/ store路径, 在 modules文件夹下创建文件gvar.js 在…

    基于Docker的前端环境管理:从开发环境到生产部署的实现方案

    # 基于Docker的前端环境管理&#xff1a;从开发环境到生产部署的实现方案 简介及前端开发环境挑战 简介 是一种容器化平台&#xff0c;可以将应用程序及其依赖项打包为一个容器&#xff0c;提供一种轻量级、可移植的环境。它能够简化开发、部署和运维的流程&#xff0c;提高…

    单片机延时函数怎么写规范?

    我们以前在开发产品的时候&#xff0c;肯定会碰到一些延时需求&#xff0c;比如常见的LED闪烁&#xff0c;按键消抖&#xff0c;控制IO口输出时序等等。 别小看延时&#xff0c;这个小问题&#xff0c;想做好&#xff0c;甚至要考虑到程序架构层面。 在开发板上&#xff0c;可能…

    数据结构 1-2 线性表的链式存储-链表

    1 原理 顺序表的缺点&#xff1a; 插入和删除移动大量元素数组的大小不好控制占用一大段连续的存储空间&#xff0c;造成很多碎片 链表规避了上述顺序表缺点 逻辑上相邻的两个元素在物理位置上不相邻 头结点 L&#xff1a;头指针 头指针&#xff1a;链表中第一个结点的存储…

    vue2版本elementUI的table分页实现多选逻辑

    1. 需求 我们需要在表格页上实现多选要求&#xff0c;该表格支持分页逻辑。 2. 认识属性 表格属性 参数说明类型可选值默认值data显示的数据array——row-key行数据的 Key&#xff0c;用来优化 Table 的渲染&#xff1b;在使用 reserve-selection 功能与显示树形数据时&…

    设计模式-解释器模式、装饰器模式

    解释器模式 定义 给分析对象定义一个语言&#xff0c;并定义语言的文法表示&#xff0c;再设计一个解释器来解释语言中的句子。也就是说&#xff0c;用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口&#xff0c;该接口解释一个特定的上下文。 类图 …

    linux 命令+相关配置记录(持续更新...)

    linux 命令记录相关配置记录 磁盘切换 cd D&#xff1a;#这里表示切换到D盘查看wsl 安装的linux 子系统 wsl --list -vwsl 卸载 linux 子系统 wsl --unregister -xxx # xxx 表示子系统的名字备份Linux 子系统 导出 wsl --export xxx yyy # xxx 表示子系统的名字 yyy 表示压…

    【PDF预览】使用iframe实现pdf文件预览,加盖章

    使用iframe实现pdf文件预览&#xff0c;以及在pdf上添加水印。另外还包括批注、打印、下载、缩放、分页等功能 <iframesrc"http://static.shanhuxueyuan.com/test.pdf"width"100%"height"100%"frameborder"0"></iframe>&l…

    网络运维学习笔记(DeepSeek优化版)002网工初级(HCIA-Datacom与CCNA-EI)子网划分与协议解析

    文章目录 子网划分与协议解析1. VLSM与CIDR技术解析1.1 VLSM&#xff08;Variable Length Subnetwork Mask&#xff0c;可变长子网掩码&#xff09;1.2 CIDR&#xff08;Classless Inter-Domain Routing&#xff0c;无类域间路由&#xff09; 2. 子网划分方法与计算2.1 常规划分…

    在线骑行|基于SpringBoot的在线骑行网站设计与实现(源码+数据库+文档)

    在线骑行网站系统 目录 基于SpringBoot的在线骑行设计与实现 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 路线攻略管理 5.3路线类型管理 5.4新闻赛事管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取…

    BUUCTF-Web方向21-25wp

    目录 [HCTF 2018]admin弱口令session伪造 [MRCTF2020]你传你&#x1f40e;呢[护网杯 2018]easy_tornado[ZJCTF 2019]NiZhuanSiWei[MRCTF2020]Ez_bypass第一层第二层 [HCTF 2018]admin 打开环境&#xff0c;有三处提示&#xff0c;一个跳转链接&#xff0c;一个登录注册&#x…

    软考——WWW与HTTP

    1.万维网&#xff08;world wide web&#xff09; 是一个规模巨大的、可以资源互联的资料空间。由URL进行定位&#xff0c;通过HTTP协议传送给使用者&#xff0c;又由HTML来进行文件的展现。 它的主要组成部分是&#xff1a;URL、HTTP、HTML。 &#xff08;1&#xff09;URL…

    GO 进行编译时插桩,实现零码注入

    Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术&#xff0c;目的是在不修改业务代码的情况下&#xff0c;实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改&#xff0c;将监控代码注入到…