【学习笔记02】vue指令学习

news2025/1/20 21:57:12

目录

一、常用的指令

 (一)v-bind

1、绑定样式

2、$event 

(二)v-on

1、v-on修饰符 

2、按键修饰符

3、案例:Todolist 

(三)v-model

1、 v-model和v-bind的区别

2、案例:数字倒数效果

3、修饰符 

​编辑

(四)v-show

(五)v-if、v-else-if和v-else

​编辑

(六)v-for

1、v-for渲染表格

2、v-for遍历数字

3、v-for遍历字符串

4、v-for遍历对象

二、其他指令

三、计算属性

 1、案例:统计还可以输入都是字数

 2、案例:通过切换,显示通过和没通过,以及全部

 3、案例:全选效果


一、常用的指令

 (一)v-bind

  • 动态的绑定元素的属性的值 可以简写为":"

1、绑定样式

    <style>
        .hide {
            display: none;
        }

        #box {
            width: 200px;
            height: 200px;
            background-color: violet;
        }
    </style>
    <div id="app">
        <div :class="{'hide': !visible}" id="box">abc</div>
        <!-- <div v-bind:style="{display:visible ? 'block' : 'none'}">123</div> -->
        <button v-on:click="toggle">点击</button>
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    //控制div的显示和隐藏
                    visible: true
                }
            },
            methods: {
                //切换显示隐藏
                toggle() {
                    this.visible = !this.visible
                }
            },
        }).mount('#app')
    </script>

2、$event 

  • 文本框输入的数据,在文本框外面也能同步显示出来
  • $event 是vue当中的事件对象
    <div id="box">
        <input type="text" v-bind:value="str" v-on:input="input($event)" /> {{str}}
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    str: "hello" //文本框里的数据
                }
            },
            methods: {
                input(e) {  //把文本框输入的数据及时更新到str里
                    // console.log(e.target.value)
                    this.str = e.target.value
                }
            }
        }).mount("#box")
    </script>

(二)v-on

  • 监听事件并响应
  • v-on:事件="事件处理函数或语句" 可以简写为"@"

1、v-on修饰符 

  • stop —— 阻止冒泡
  • capture —— 捕获模式
  • prevent —— 阻止默认行为
  • once —— 响应一次
  • self —— 只有自身响应事件
  • 点击small盒子时,同时触发small和big两个盒子,通过stop阻止冒泡

    <style>
        .big {
            width: 200px;
            height: 200px;
            background-color: teal;
            position: relative;
        }

        .small {
            width: 100px;
            height: 100px;
            background-color: deeppink;
            position: absolute;
            left: 50px;
            top: 50px;
        }
    </style>
    <div id="box">
        <div @click="big" class="big">big
            <div @click.stop="small" class="small">small</div>
        </div>
    </div>
    <script>
        Vue.createApp({
            data() {
                return {

                }
            },
            methods: {
                big() {
                    console.log("big")
                },
                small() {
                    console.log("small")
                },
            }
        }).mount("#box")
    </script>

  •  capture:捕获模式
    <div id="box">
        <div @click.capture="big" class="big">big
            <div @click.capture="small" class="small">small</div>
        </div>
    </div>

  • prevent :阻止默认行为
        <a href="http://www.baidu.com" @click.prevent="go">点击</a>
  • once:响应一次
    <div id="box">
        <div @click.once="big" class="big">big
            <div @click.once="small" class="small">small</div>
        </div>
    </div>

  • self :只有自身响应事件
    <div id="box">
        <div @click.self="big" class="big">big
            <div @click.self="small" class="small">small</div>
        </div>
    </div>

2、按键修饰符

  • .enter
  • .esc
        <input type="text" @keyup.enter="go" />

3、案例:Todolist 

    <div id="box">
        <input type="text" v-model="str" @keyup.enter="add" />
        <ul>
            <li v-for="(item,index) in arr" :key="index">
                {{item}}
                <button @click="remove(index)">删除</button>
            </li>
        </ul>
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    str: '', //存储文本框的数据
                    arr: [] //存储列表数据
                }
            },
            methods: {
                add() { //把文本框里的数据放到列表里
                    //如果文开不开为空,就不进行插入列表
                    if (this.str === "") return;

                    this.arr.push(this.str);
                    //清空文本框
                    this.str = ""
                },
                remove(index) {
                    this.arr.splice(index, 1)
                }
            }
        }).mount("#box")
    </script>

(三)v-model

  • 双向绑定数据的指令
  • $event是vue当中的事件对象

1、 v-model和v-bind的区别

  • v-model 双向绑定,数据变化了,视图变化,视图变化了,数据也变化
  • v-bind 数据变化了,视图变化,视图变化了,数据不变化

 2、案例:数字倒数效果

    <div id="box">
        <input type="text" v-model="str" v-bind:maxLength="maxLength" > 
        还可以输入{{maxLength-str.length}}个字
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    str:"" , //文本框数据
                    maxLength:20 //最大长度
                }
            },
        }).mount("#box")
    </script>

3、修饰符 

  • .lazy ——监听 change 事件而不是 input
  • .number ——将输入的合法符串转为数字
  • .trim ——移除输入内容两端空格

    <div id="box">
        <input type="text" v-model.number.lazy.trim="m" />+
        <input type="text" v-model.number.lazy.trim="n" /> = {{m+n}}
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    m: 1,
                    n: 1
                }
            },
        }).mount("#box")
    </script>

(四)v-show

  • 切换css样式,实现显示隐藏
    <div id="box">
        v-if: <div v-if="visible">hello world</div>
        v-show <div v-show="visible">hello world</div>
        <button @click="toggle">切换</button>
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    visible: true //控制div的显示和隐藏
                }
            },
            methods: {
                toggle() {
                    this.visible = !this.visible
                }
            }
        }).mount("#box")
    </script>

(五)v-if、v-else-if和v-else

  • 惰性指令,条件成立的时候,才进行渲染,条件不成立不进行渲染
     <div id="box">
        猜字优秀:<input type="text" v-model.number="inputNum">
        <p v-if="inputNum>n">大了</p>
        <p v-else-if="inputNum<n">小了</p>
        <p v-else>对了</p>
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    n: Math.ceil(Math.random()*10),   //产生一个1--10的随机数
                    inputNum:0 //用户输入的数字
                }
            },
        }).mount("#box")
    </script>

(六)v-for

1、v-for渲染表格

    <style>
        table,
        td {
            border-collapse: collapse;
        }

        td,
        th {
            width: 100px;
            height: 30px;
            text-align: center;
        }
    </style>
    <div id="box">
        <table border="1">
            <tr>
                <th>id</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
            <tr v-for="(item,index) in arr" :key="item.id">
                <td>{{index+1}}</td>
                <td>{{item.name}}</td>
                <td>{{item.age}}</td>
            </tr>
        </table>
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    arr: [
                        { id: 2, name: "aaa", age: 18 },
                        { id: 3, name: "ccc", age: 22 },
                        { id: 5, name: "eee", age: 19 }
                    ]
                }
            },
        }).mount("#box")
    </script>

2、v-for遍历数字

        <ul>
            <li v-for="n in 5"> {{n}}</li>
        </ul>

 3、v-for遍历字符串

        <span v-for="(char,index) in str">{{char}}
            <a href="#" v-if="index<str.length-1">
                -
            </a>
        </span>

4、v-for遍历对象

        <ul>
            <li v-for="(value,key,index) in obj">
                {{key}}--{{value}}---{{index}}
            </li>
        </ul>

二、其他指令

  • v-html:渲染 html 代码
  • v-text:相当于差值表达式
  • v-pre:跳过编译这个元素和它的子元素的模板
  • v-once:只渲染一次,忽略更新
  • v-cloak:编译模板过程存在的指令,编译后自动取消
  • v-html:渲染html代码
    <div id="box" v-cloak>
        v-html:<p v-html="str"></p>
        差值表达式:{{str}}
    </div>
    <script>
        Vue.createApp({
            data() {
                return {
                    str: "<h2>hello world</h2>",
                }
            },
        }).mount("#box")
    </script>

  • v-text:相当于差值表达式
    <div id="box" v-cloak>
        差值表达式:<span>{{n}}</span> <br>
        v-text:<span v-text="n"></span>
    </div>

  • v-pre:跳过编译这个元素和它的子元素的模板
    <div id="box" v-cloak>
        <span>{{n}}</span> <br>
        v-prev:<span v-pre>{{n}}</span>
    </div>

  • v-once:只渲染一次,忽略更新
    <div id="box" v-cloak>
        <span>{{n}}</span> <br>
        v-once:<span v-once>{{n}}</span>
    </div>

  • v-cloak:编译模板过程存在的指令,编译后自动取消

    <style>
        [v-cloak] {
            display: none;
        }
    </style>
    <div id="box" v-cloak>
        <div>{{n}}</div>
    </div>
    <script>
        setTimeout(() => {
            Vue.createApp({
                data() {
                    return {
                        str: "<h2>hello world</h2>",
                        n: '1234356'
                    }
                },
            }).mount("#box")
        }, 2000)
    </script>

 三、计算属性

  • 根据数据的变化自动计算更新最新的值
  • 数据变,值就变,数据不变,取缓存
    <div id="box">
        <input type="text" v-model="str" /> <br>
        {{reverseStr}}
        <button @click="getInfo">取计算属性的值</button>
    </div>
    <script>
        Vue.createApp({
            computed: {
                reverseStr() {
                    return this.str.split("").reverse().join("") + Math.random()
                }
            },
            data() {
                return {
                    str: "hello world"
                }
            },
            methods: {
                getInfo() {
                    console.log("getINfo", this.reverseStr)
                }
            }
        }).mount("#box")
    </script>

 1、案例:统计还可以输入都是字数

    <div id="box">
        <input type="text" v-model="str" v-bind:maxLength="maxLength" > 
        {{info}}
    </div>
    <script>
        Vue.createApp({
            computed:{
                info(){
                    return `还可以输入${this.maxLength-this.str.length}个字`
                }
            },
            data() {
                return {
                    str:"" , //文本框数据
                    maxLength:20 //最大长度
                }
            },
        }).mount("#box")
    </script>

 2、案例:通过切换,显示通过和没通过,以及全部

    <div id="box">
        <ul>
            <li v-for="item in filterList" :key="item.id">
                <input type="checkbox" v-model="item.pass" />
                {{item.name}} {{item.age}}
            </li>
        </ul>
        <button @click="type='all'">全部</button>
        <button @click="type='yes'">通过的</button>
        <button @click="type='no'">没通过的</button> {{type}}
    </div>
    <script>
        Vue.createApp({
            computed: {
                filterList() {
                    return this.list.filter((item) => {
                        if (this.type === 'all') { //取全部同学
                            return true
                        }
                        else if (this.type === 'yes') { //取及格的同学
                            return item.pass
                        }
                        else {
                            return !item.pass //取不及格的同学
                        }
                    })
                }
            },
            data() {
                return {
                    type: 'all',  // 'all' 全部 'yes':及格 'no' 不及格的
                    list: [
                        { id: 1, name: "aaa", age: 19, pass: false },
                        { id: 2, name: "bbb", age: 22, pass: true },
                        { id: 3, name: "ccc", age: 15, pass: false }
                    ]
                }
            },
        }).mount("#box")
    </script>

 3、案例:全选效果

    <div id="box">
        <input type="checkbox" v-model="select" /> {{select}}
        <ul>
            <li v-for="item in list" :key="item.id">
                <input type="checkbox" v-model="item.flag" />
                {{item.name}} {{item.price}}
            </li>
        </ul>
    </div>
    <script>
        Vue.createApp({
            computed: {
                select: {
                    get() {  //读取时执行
                        // return this.sel
                        //每一项目选中这个全选按钮才选中,有一个不选中就不选
                        return this.list.every(item => item.flag)
                    },
                    set(v) {   //修改时会执行
                        // this.sel=v;
                        //全选全部选功能
                        this.list.forEach(item => item.flag = v)
                    }
                }
            },
            data() {
                return {
                    sel: false, //默认全选复选框没有选中
                    list: [
                        { id: 1, name: "aaa", price: 19, flag: false },
                        { id: 2, name: "bbb", price: 22, flag: true },
                        { id: 3, name: "ccc", price: 15, flag: false }
                    ]
                }
            },
        }).mount("#box")
    </script>

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

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

相关文章

wy的leetcode刷题记录_Day60

wy的leetcode刷题记录_Day60 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2022-12-21 前言 这几天身体不舒服&#xff0c;现在重新开始更新。 目录wy的leetcode刷题记录_Day60声明前言1753. 移除石子的最大得分题目介绍思路代码收获…

Java 异常(Exceptions)

目录 1、什么是异常&#xff1f; 2、捕获并处理异常 try-with-resources 语句 3、通过方法抛出异常 自定义异常 1、什么是异常&#xff1f; 定义&#xff1a;异常是在程序执行过程中发生的一种事件&#xff0c;它会中断程序指令的正常流程。 当方法中发生错误时&#xff0…

2022年我国止血药行业市场规模不断增长 激活凝血因子活性药是主流产品

根据观研报告网发布的《中国止血药市场现状深度研究与发展前景分析报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;止血药主要是指凡能够制止体内外出血的药物&#xff0c;主要适用于各部位出血病症&#xff0c;如咯血、衄血、吐血、尿血、便血、崩漏、紫癜及创伤出…

记录一次使用 Ubuntu 编译 Wakaama 踩坑过程

1. 背景 公司项目需要使用 LwM2M 协议&#xff0c;由于是个相对冷门的小众协议&#xff0c;客户端模拟器几乎没有&#xff0c;只有 Eclipse Wakaama 相对来说功能齐全、易用&#xff0c;但是这个软件没有编译好的程序包&#xff0c;只能从 Github 拉取源码手动编译运行。 不知道…

操作系统期末知识点复习

操作系统知识点总结 参考用书&#xff1a;计算机操作系统&#xff08;第四版&#xff09;汤小丹等著 1、必考知识点 第一章 操作系统引论 操作系统的概念及特征操作系统的运行环境 第二章 进程的描述与控制 进程状态与转换同步与互斥的基本概念信号量信号量的基本应用生产者消…

Nacos的配置中心的了解

目录 1. 为何需要配置中心 2. nacos的配置中心 2.1 配置示例 2.2 多环境配置 2.3 GROUP 2.4 namespace 1. 为何需要配置中心 没有配置中心的情况下会出现什么情况&#xff1a; 如果没有配置中心&#xff0c;则各个服务的配置文件分散在各个项目中&#xff0c;不方便维护…

不用光盘重装系统如何操作

​光盘重装系统是之前十分常用的系统安装方法,随着科技的飞速发展,现如今重装系统的方法五花八门,一键重装系统以及U盘重装系统等方法的出现取代了光盘重装系统,这里就来介绍一下不用光盘重装系统操作方法。 工具/原料&#xff1a; 系统版本&#xff1a;windows10系统 品牌型…

Kotlin协程笔记:CoroutineScope管理协程

CoroutineScope 是实现协程结构化并发的关键。使用 CoroutineScope&#xff0c;可以批量管理同一个作用域下面所有的协程。 CoroutineScope 与 结构化并发 launch、async 被定义成了 CoroutineScope 扩展函数。在调用 launch 之前&#xff0c;必须先获取 CoroutineScope。 pub…

高级又高效的属性表编辑技术,你值得拥有!

当你要按关键词选择内容,无从下手? 当你要修改字段的部分内容,不知所措? 当你要提取出字段的某些内容,毫无头绪? 当你要按照位数来提取字符内容,力不从心? 当你要为字段补充一些新的内容,目瞪口呆? 当你要把一个字段分割成多个字段,抓耳挠腮? ...... 属性表的…

CUDA ~ WarpReduce

又是一篇关于cuda的 要好好学学哦, CUDA 编程进阶分享&#xff0c;一些 warp 的使用 如何实现一个高效的Softmax CUDA kernel&#xff1f;多少还是有些细节没有理解&#xff0c;恰好最近要做一个类似的 ReduceScale Kernel&#xff0c;原理机制还是比较相似的&#xff0c;所以…

CSS -- 10. 移动WEB开发之rem布局

文章目录移动WEB开发之rem布局1 rem基础2 媒体查询2.1 什么是媒体查询2.2 语法规范2.3 mediatype 查询类型2.4 关键字2.5 媒体特性2.6 案例&#xff1a;根据页面宽度改变背景颜色2.7 媒体查询rem实现元素动态大小变化2.8 针对不同的屏幕尺寸引入不同的样式文件3 Less基础3.1 维…

8000字详解Thread Pool Executor

摘要&#xff1a;Java是如何实现和管理线程池的?本文分享自华为云社区《JUC线程池: ThreadPoolExecutor详解》&#xff0c;作者&#xff1a;龙哥手记 。 带着大厂的面试问题去理解 提示 请带着这些问题继续后文&#xff0c;会很大程度上帮助你更好的理解相关知识点。pdai …

数据泄露成数据安全最大风险,企业如何预防呢?

据《中国政企机构数据安全风险分析报告》显示&#xff0c;2022年1月——2022年10月&#xff0c;安全内参共收录全球政企机构重大数据安全报道180起&#xff0c;其中数据泄露相关安全事件高达93起&#xff0c;占51.7%。与近三年平均每月公开报道频次相比&#xff0c;2022年相较前…

如何在3DMAX中不使用Maxscript或插件破碎物体对象?

在3DMAX中破碎物体我们通常会借助Maxscript或者插件&#xff0c;其实&#xff0c;不借助任何其他工具&#xff0c;3DMAX也可以实现对物体的破碎&#xff0c;下面就给大家介绍一种方法&#xff1a; 1.首先&#xff0c;创建一个破碎对象&#xff0c;比如一个石块&#xff08;或者…

AI趋势下,小布助手的进化论

“要构建人工智能等高精尖产业的新增长引擎”&#xff0c;随着人工智能在未来全球科技经济中的重要作用愈加凸显&#xff0c;当前产业已然获得了有史以来最强的政策建构力量。 随着政策的利好&#xff0c;中国人工智能进入一个前所未有的快速发展阶段。企查查数据显示&#xf…

疫情下的在线教学数据观

由于新型冠状病毒感染的肺炎疫情影响&#xff0c;剧烈增长的市场需求助推了在线教育的发展&#xff0c;同时也暴露了一些问题。 最近我们被客户要求撰写关于疫情的研究报告&#xff0c;包括一些图形和统计输出。 在本文中&#xff0c;我们结合了对100多个高中学生进行的在线教…

快讯 | 嘉为蓝鲸受邀出席汽车新智造数字行业峰会,助力构建数字时代竞争力!

12月9日&#xff0c;第五届GADI汽车新智造数字创新行业峰会暨年度评选盛典于上海圆满落幕&#xff0c;嘉为蓝鲸受邀出席。本届大会以“数智创新 赋能破局”为主题&#xff0c;多方面切入解读新能源汽车的数字化发展趋势&#xff0c;助力车企构建数字时代竞争力。 01 研运一体&a…

数据通信基础 - 信道特性(奈奎斯特定理、香农定理 )

文章目录1 概述1.1 通信系统模型图2 信道特性2.1 信道带宽 W2.2 奈奎斯特定理 - 无噪音2.3 香农定理 - 有噪音2.4 带宽、码元速率、数据速率 关系梳理3 网工软考真题1 概述 1.1 通信系统模型图 通信的目的&#xff1a;传递信息 2 信道特性 2.1 信道带宽 W 模拟信道&#…

数据中台选型必读(六):说说数据服务的七大核心功能

在前面的文章中&#xff0c;我们介绍了数据中台的元数据中心、指标字典与指标体系、数据模型设计、数据质量评估等内容&#xff0c;这些都是One Data理念下数据中台架构的重要部分。 我们今天要讲的One Service——统一数据服务&#xff0c;指的是由数据中台提供统一的数据接入…

搭建自动发卡网站搭建教程(独角数卡)保姆级教程,支付 + 图文

自动发卡网站 程序是开源的独角数卡 我搭建了一个这样的 wooknow自动销售发卡http://ok.54ndd.com/ 一个在线销售虚拟产品的平台。你应该见过这样的发卡平台。一些虚拟产品&#xff0c;如软件、激活码和会员可以放在上面出售。我在这里使用的发卡项目是一个开源的单字符数字…