Vue—指令

文章目录

    • 指令初识 和 v-html
      • Vue指令
      • 1.v-html(动态解析标签)
      • 2.v-show(display) VS v-if(添加和删除)
      • 3.v-else和v-else-if(与v-if一起使用)
      • 4.v-on
        • ①v-on两种用法
        • ②v-on调用传参
      • 5.v-bind
        • v-bing对于样式控制的增强
          • 1°操作class
            • class:用对象方法写:案例:京东秒杀tab导航高亮
          • 2°操作style
            • style: 案例:动态控制进度条
      • 案例:图片的切换
      • 6.v-for (基于数据进行循环)
      • 案例:书架
        • v-for中的key
      • 7.v-model
        • v-model应用于其他表单元素
      • 案例:记事本(综合)
      • 指令修饰符

指令初识 和 v-html

Vue指令

Vue会根据不同的【指令】,针对标签实现不同的【功能】
指令:带有v-前缀的特殊标签属性👇
v-html:作用是动态的设置元素的innerHTML
在这里插入图片描述
下面的classtitle不是vue指令
在这里插入图片描述

1.v-html(动态解析标签)

在这里插入图片描述

2.v-show(display) VS v-if(添加和删除)

在这里插入图片描述

3.v-else和v-else-if(与v-if一起使用)

在这里插入图片描述

4.v-on

①v-on两种用法

在这里插入图片描述
代码中的文字不清晰,从左到右在下方展示👇
在这里插入图片描述
在这里插入图片描述

②v-on调用传参

在这里插入图片描述

在这里插入图片描述

5.v-bind

v-bing对于样式控制的增强

为了方便开发者进行 样式控制,Vue扩展了v-bind的语法,可以针对class类名style行内样式进行控制

1°操作class

在这里插入图片描述

class:用对象方法写:案例:京东秒杀tab导航高亮

activeindex为0的时候就是京东秒杀高亮,但是想要动态控制下表的0,1,2,就要用到v-bind:class
切换高亮就是改下标
在这里插入图片描述

<!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>
        li{
            list-style: none;
            float: left;
            background-color: gray;
            height:40px;
            width: 90px;
            line-height: 35px;
            text-align: center;
            border-bottom:2px solid red;
        }
        a{
            text-decoration:none;
            /* color: aliceblue; */
            color: black;
        }
        .active{
            background-color: red;
            width:40px;
            height: 100px;
            color: aliceblue;
        }
    </style>
</head>
<body>
    <div id="app">
        <ul>
            <li @click="activeIndex=index" v-for="(item,index) in list" :key="item.id">
                <a :class="{active:index === activeIndex}" href="#">{{ item.name }}</a>
            </li>
        </ul>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                activeIndex:0,
                list:[
                    {id:1,name:'京东秒杀'},
                    {id:2,name:'每日特价'},
                    {id:3,name:'品类秒杀'},
                ]
            }
        })
    </script>
</body>
</html>
2°操作style

在这里插入图片描述

style: 案例:动态控制进度条

在这里插入图片描述

<!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>
        .progress{
            width: 400px;
            height: 30px;
            background-color: rgb(18, 18, 18);
            border-radius: 20px;
            padding-right: 5px;
        }
        .inner{
            position: relative;
            height: 25px;
            width: 100px;
            background-color: rgb(111, 111, 160);
            border-radius: 20px;
            top: 2.5px;
            left: 2px;
            transition: all 1s;
            text-align: right;
        }

    </style>
</head>
<body>
    <div id="app"> 
        <div class="progress">
            <div class="inner" :style="{width: percent+'%'}">
                <span>{{ percent }}%</span>
            </div>
        </div>
        <button @click="percent=25">设置25%</button>
        <button @click="percent=50">设置50%</button>
        <button @click="percent=75">设置75%</button>
        <button @click="percent=100">设置100%</button>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                percent:30
            }
        })
    </script>
</body>
</html>

案例:图片的切换

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

6.v-for (基于数据进行循环)

在这里插入图片描述

案例:书架

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <h3>书架</h3>
        <ul>
        <!-- li要渲染多次 -->
            <li v-for="(item,index) in booksList" :key="item.id">
                <span>{{ item.name }} </span>  <!-- item是每一个对象,booksList的每一项 -->
                <span>{{ item.author }}</span>
                <!-- 注册点击事件 → 通过id进行删除数组中的对应项 -->
                <button @click="del(item.id)">删除</button>
            </li>
        </ul>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                booksList:[
                    //从数组中删除对应项:①根据下表index来删  ②根据id来删(有id根据id来删,因为id是唯一标识)
                    {id:1,name:'《红楼梦》', author:'曹雪芹'},
                    {id:2,name:'《西游记》', author:'吴承恩'},
                    {id:3,name:'《水浒传》', author:'施耐庵'},
                    {id:4,name:'《三国演义》', author:'罗贯中'}
                ]
            },
            methods:{
                //del这个方法是需要通过接收id来删除的
                del(id){
                    //通过 id 进行删除数组中的对应项 → filter(不会改变原数组)
                    //filter:根据条件保留满足条件的对应项,得到一个新数组。
                    // conosle.log(this.booksList.filter(item => item.id !==id))
                    //接下来需要将刚才得到的新数组赋值回给原数组
                    this.booksList = this.booksList.filter(item => item.id !==id)
                }
            }
        })
    </script>
</body>
</html>
v-for中的key

v-for的默认行为会尝试原地修改元素(就地复用)
注意点
1.key的值只能是字符串数字类型
2.key的值必须具有唯一性
3.推荐使用id作为key(唯一),不推荐使用index作为key(会变化,不对应)

图中代码就是上面的代码
在这里插入图片描述
在这里插入图片描述

7.v-model

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- v-model 可以让数据和视图,形成双向数据绑定
        (1) 数据变化,试图自动更新
        (2) 试图变化,数据自动更新
        可以快捷[获取]或[设置]表单元素的内容 -->

        账户:<input type="text" v-model="username"> <br><br>
        密码:<input type="password" v-model="password"> <br><br> 
        <button @click="login">登录</button>
        <button @click="reset">重置</button>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                username:'',
                password:''
            },
            methods:{
                login(){
                    console.log(this.username,this.password)
                },
            //输入框要清空,其实就等价于数据要清空
                reset(){
                    this.username=''
                    this.password=''
                }
            }
        })
    </script>
</body>
</html>
v-model应用于其他表单元素

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <h3>学习网</h3>

        姓名:
        <input type="text" v-model="username">
        <br><br>

        是否单身:
        <input type="checkbox" v-model="isSingle">
        <br><br>

        性别:
        <!--
            1. name:给单选框加上name属性 可以分组→同一组互相会互斥(只能选一个)
            1. value:给单选框加上value属性 ,用于提交给后台数据
         -->
        <input v-model="gender" type="radio" name="gender" value="1"><input v-model="gender" type="radio" name="gender" value="2"><br><br>


        所在城市:
         <!-- 
            1.option 需要设置 value 值,提交给后台
            2.select 的 value 值,关联了选中的 option 的 value 值
         -->
        <select v-model="cityId">
            这边绑定的 value 值是用来提交的
            <option value="101">北京</option>
            <option value="102">上海</option>
            <option value="103">成都</option>
            <option value="104">南京</option>
        </select>
        <br><br>

        自我描述:
        <textarea v-model="describe"></textarea>
        <button>立即注册</button>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                username:'',
                //是否单身应该绑定布尔值
                isSingle:false,
                gender:"2",
                cityId:'102',
                describe:""
            }
        })
    </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>Document</title>
    <style>
        body{
            background: gray;
        }
        .box{
            width: 350px;
            background-color: rgb(91, 91, 91);
            margin:0 auto;
            box-shadow:0 20px 20px #615e5e,
            0 40px 60px #878383;
            border-radius: 7px;
        }
        li{
            list-style: none;
        }

        h1{
            margin-left: 600px;
            position: relative;
            top:50;
            left: 55px;
            font-size: 4em;
            text-decoration: none;
            line-height:1em;
            letter-spacing: 2px;
            text-transform: uppercase;
            color:transparent;
            -webkit-text-stroke: 1px rgba(255,255,255,0.5);
            text-shadow:0 20px 20px #615e5e,
            0 40px 60px #878383;
        }
        input{
            margin-top: 10px;
            margin-left:40px;
            margin-bottom: 10px;
            width: 200px;
            height: 50px;
            font-size:18px;
            border-radius:10px 0 0 10px;
            border: 2px solid rgb(153, 158, 153);
            font-style: italic;
            outline: none;
        }
        input::placeholder {
            color: rgb(214, 214, 214);
        }
        .add{
            position: absolute;
            height: 56px;
            top: 160px;
            background-color: rgb(130, 142, 142);
            border: 1px solid rgb(137, 115, 159);
            border-radius:0 10% 10% 0;
            color: #545252;
            font-size: 14px;
        }
        .add:hover{
            color: #343333;
        }
        .index{
            font-size: 20px;
            text-align:justify;
            color: #b5b4b4;
        }
        .destory{
            position: absolute;
            border: none;
            background: transparent;
            margin-left: 265px;
            margin-top: -25px;
            font-size: 20px;
            color: #343232;
            display: none;
        }
        li:hover .destory{
            display: block;
        }
        label{
            font-size: 20px;
            padding-left: 10px;
            letter-spacing: 2px;
            color: #aeacac;
        }

        .todo-count{
            margin-left: 50px;
            padding-right: 130px;
        }
        .clear-completed{
           background:transparent ;
           border: none;
           font-size:15px;
           color: rgb(147, 144, 140);
        }
        .clear-completed:hover{
            color: #3c3b3b;
        }
    </style>
</head>
<body>
    <!-- 功能需求:
        ①渲染列表
        ②删除功能
        ③添加功能
        ④底部统计 和 清空 -->
<h1>我的记事本</h1>
<div class="box">
<section id="app">
    <header class="header">
        <input v-model="todoName" placeholder="请输入待办事件" class="new-todo">
        <button @click="add" class="add">添加任务</button>
    </header>
    <section class="main">
        <ul class="todo-list">
            <li class="todo" v-for="(item,index) in list" :ket="item.id" style="margin-bottom: 17px;">
                <div class="view">
                    <span class="index">{{ index+1 }}.</span><label>{{ item.name }}</label>
                    <button @click="del(item.id)" class="destory"><strong>x</strong></button>
                </div>
                <span style="margin-left:-10px;color: #797979;">_______________________________________</span>
            </li>
        </ul>
    </section>
        <!-- 清空和统计   →如果没有任务了,底部隐藏-->
        <footer class="footer" v-show="list.length>0">
            <!-- 统计 -->
            <div style="display: flex;padding-bottom: 10px;">
                <span class="todo-count" style="color: #a6a5a5;">合计:<strong> {{ list.length }} </strong></span>
           
            <!-- 清空 -->
                <button @click="clear" class="clear-completed">
                     清空代办
                </button>
            </div>
        </footer>
</section>
</div>
        <!-- 底部 -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
        <script>
            // 添加功能
            //1.通过 v-model 绑定 输入框 → 实时获取表单元素的内容
            //2.点击按钮,进行新增,往数组最前面加 unshilft
            const app = new Vue({
                el:'#app',
                data:{
                    todoName:'',
                    list:[
                        {id:1 , name:'添加一个代办(删除此项)'},

                    ]
                },
                methods:{
                    del(id){
                       this.list = this.list.filter(item => item.id !==id)
                    },
                    add(){
                        if(this.todoName.trim() === ''){
                            alert('请输入代办')
                            return
                        }
                        this.list.unshift({
                            id:+new Date(),
                            name:this.todoName
                        })
                        this.todoName=''
                    },
                    clear(){
                        this.list=[]
                    }
                }
            })

        </script>
</body>
</html>

307bdcb6c108f86c0f8.png)

在这里插入图片描述

指令修饰符

在这里插入图片描述
在这里插入图片描述
v-xxx(over)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何通过frp、geoserver发布家里电脑的空间数据教程

如何通过家里电脑的geoserver发布空间数据的教程 简介 大家好&#xff0c;我是锐多宝&#xff0c;最近我在开发一个新网站的时候遇到一个需求&#xff0c;这里记录一下以帮助需要用到的网友。 我的需求是&#xff1a;用户通过网站前端上传空间数据后&#xff0c;即可在前端展…

用友-u9-patchfile-任意文件上传-未公开Day漏洞复现

0x01阅读须知 本文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考。本文章仅用于信息安全防御技术分享&#xff0c;因用于其他用途而产生不良后果,作者不承担任何法律责任&#…

Kafka-消费者-KafkaConsumer分析-Heartbeat

在前面分析Rebalance操作的原理时介绍到&#xff0c;消费者定期向服务端的GroupCoordinator发送HeartbeatRequest来确定彼此在线。 下面就来详细分析KafkaConsumer中Heartbeat的相关实现。 首先了解一下心跳请求和响应的格式。HeartbeatRequest的消息体格式比较简单&#xff…

YOLOv8 更换主干网络之 HGNetV2

论文地址:https://arxiv.org/abs/2304.08069 代码地址:https://github.com/PaddlePaddle/PaddleDetection 中文翻译:https://blog.csdn.net/weixin_43694096/article/details/131353118 YOLOv8 更换方式 YOLOv8 想用这个主干直接换就行了,因为项目里面已经集成了,写一个…

class_14:继承

C继承有点类似于c语言 结构体套用 #include <iostream> #include <string> using namespace std;//基类,父类 class Vehicle{ public:string type;string contry;string color;double price;int numOfWheel;void run();void stop(); };//派生类&#xff0c…

检索增强(RAG)的方式---重排序re-ranking

提升RAG&#xff1a;选择最佳嵌入Embedding&重排序Reranker模型 检索增强生成(RAG)技术创新进展&#xff1a;自我检索、重排序、前瞻检索、系统2注意力、多模态RAG RAG的re-ranking指的是对初步检索出来的候选段落或者文章&#xff0c;通过重新排序的方式来提升检索质量。…

JavaScript 学习笔记(WEB APIs Day3)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. JavaScript 学习笔记&#xff08;Day1&#xff09; 2. JavaSc…

IaC基础设施即代码:Terraform 进行 lifecycle 生命周期管理

目录 一、实验 1.环境 2.Terraform 创建网络资源 3.Terraform 进行 create_before_destroy&#xff08;销毁前创建新资源&#xff09; 4.Terraform 进行 prevent_destroy&#xff08;防止资源被销毁&#xff09; 5.Terraform 进行 ignore_changes&#xff08;忽略资源的差…

redis-exporter grafana面板配置

一、前言 关于使用tensuns自带的grafana监控模板&#xff0c;监控redis-exporter接口会有一些数据丢失的问题&#xff0c;需要自行修改一下grafana模板的json 二、修改模板 redis grafana模板id&#xff1a;17507 主要是针对cpu使用率和内存使用率做一个说明&#xff0c;因为…

目标检测数据集 - PASCAL VOC2012

文章目录 1. PASCAL VOC20122. 标注自己的数据集 1. PASCAL VOC2012 PASCAL VOC挑战赛&#xff08;The PASCAL VIsual Object Classes&#xff09;是一个世界级的计算机视觉挑战赛&#xff0c;PASCAL全称&#xff1a;Pattern Analysis&#xff0c;Statical Modeling and Compu…

MySQL的执行流程

一、MySQL的执行流程 MySQL架构分为Server层、存储引擎&#xff0c;其中Server层又分为连接器、查询缓存、分析器、优化器执行器五个部分。当客户端发送请求后依次需要经过 处理请求、查询缓存、语法解析、查询优化、存储引擎部分。 1. 连接器 负责维持和管理连接&#xff…

深度学习常用代码总结(k-means, NMS)

目录 一、k-means 算法 二、NMS 一、k-means 算法 k-means 是一种无监督聚类算法&#xff0c;常用的聚类算法还有 DBSCAN。k-means 由于其原理简单&#xff0c;可解释强&#xff0c;实现方便&#xff0c;收敛速度快&#xff0c;在数据挖掘、数据分析、异常检测、模式识别、金…

资产及价值导入

文章目录 1 Introduction2 Code3 Summary 1 Introduction We will implement the following fuction for importing asset value . In the code we introduce that how to transfer value for BAPI. 2 Code DATA: key TYPE bapi1022_key,generaldata …

【MYSQL】存储引擎MyISAM和InnoDB

MYSQL 存储引擎 查看MySQL提供所有的存储引擎 mysql> show engines; mysql常用引擎包括&#xff1a;MYISAM、Innodb、Memory、MERGE 1、MYISAM&#xff1a;全表锁&#xff0c;拥有较高的执行速度&#xff0c;不支持事务&#xff0c;不支持外键&#xff0c;并发性能差&#x…

二层交换机和三层交换机

二层交换机&#xff1a;将源mac和端口进行转发&#xff0c;是同一个网段进行通信的&#xff0c;不能实现路由转发&#xff0c;若想跨网段则需要接入一个路由器 如&#xff1a;pc1 192.168.1.1 与 pc2 192.168.1.2通信需要经过二层交换机&#xff0c;二层交换机不能配置ip的&am…

Linux ---- 小玩具

目录 一、安装&#xff1a; 1、佛祖保佑&#xff0c;永不宕机&#xff0c;永无bug 2、小火车 3、艺术字和其它 天气预报 艺术字 4、会说话的小牦牛 5、其他趣味图片 我爱你 腻害 英雄联盟 帅 忍 龙 你是猪 福 好运连连 欢迎 加油 想你 忘不了你 我错了 你…

【差分数组】【图论】【分类讨论】【整除以2】100213按距离统计房屋对数目

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及知识点 差分数组 图论 分类讨论 整除以2 LeetCode100213按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中&#xff0c;存在编号从 1 到 n 的房屋&#xff0c;由 n 条街道相连。对所有 1 < i < n…

华为机考入门python3--(0)模拟题2-vowel元音字母翻译

分类&#xff1a;字符串 知识点&#xff1a; 字符串转list&#xff0c;每个字符成为list中的一个元素 list(string) 字符串变大小写 str.upper(), str.lower() 题目来自【华为招聘模拟考试】 # If you need to import additional packages or classes, please import …

C语言实现简单的扫雷游戏

目录 1 -> test.c 2 -> game.c 3 -> game.h 1 -> test.c #define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu() {printf("************************************\n");printf("********* 1.play ********\n&quo…

多线程编程1

一、线程的引入 上节&#xff0c;我们介绍了进程的概念&#xff0c;以及操作系统内核是如何管理进程的&#xff08;描述组织&#xff09;&#xff0c;PCB中的核心属性有哪些&#xff0c; 引入进程这个概念&#xff0c;最主要的目的&#xff0c;就是为了解决“并发编程”这样的…