首页 > 其他分享 >前端小白的学习之路(Vue2 二)

前端小白的学习之路(Vue2 二)

时间:2024-04-09 22:33:22浏览次数:24  
标签:el Vue 前端 修饰符 小白 事件 Vue2 监听 属性

提示:学习vue2的第二天,笔记记录:自定义指令,事件修饰符,属性计算,属性监听,属性过滤

目录

一、自定义指令

1.全局注册

2.局部注册

二、事件修饰符 

1.常用事件修饰符

1)事件相关修饰符

2)键盘事件相关修饰符

3)鼠标事件相关修饰符

三、属性计算

四、属性监听

五、属性过滤


一、自定义指令

在 Vue 中,你可以通过自定义指令来扩展 HTML 元素的行为。

1.全局注册

directive:全局注册通过Vue下的一个方法directive来自定义指令,全局注册的指令可以在任何 Vue 实例的模板中使用

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
</head>

<body>
    <div id="app">
        <!-- 定义一个改变字体颜色的指令-->
        <h2 v-color="`purple`">你好,世界</h2>

    </div>
    <script src="./libs/vue.js"></script>
    <script>
        // 当文档上指令满足不了我们的需求,可以选择自定义指令

        // 1) 注册全局指令
        Vue.directive('color', {
            // 当被绑定的元素插入到 DOM 中时改变字体颜色
            //el:被绑定的元素,option:接受的参数,是一个对象
            inserted: function (el,option) {
                if(typeof el === 'object'){
                    el.style.color = option.value;
                }
            }
        })

        //禁止控制台输出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //挂载容器
            el: "#app",
    
        })


    </script>
</body>

</html>

2.局部注册

 directives:局部注册是在vue实例中通过在对象directives中进行自定义指令

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
</head>

<body>
    <div id="app">
        <!-- 渲染纯文本 -->
        <h2 v-text="`hello title`"></h2>
        <hr>
        <!--自定义指令渲染文本-->
        <h3 v-mytext="2024"></h3>

    </div>
    <script src="./libs/vue.js"></script>
    <script>
        // 当文档上指令满足不了我们的需求,可以选择自定义指令

        //禁止控制台输出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //挂载容器
            el: "#app",
            // 2)自定义指令
            directives: {
                // 名称
                mytext: {
                    inserted(el, option) {
                        // console.log(el, option);
                        if (typeof el === 'object') {
                            el.innerHTML = option.value;
                        }
                    }
                },

            }

        })


    </script>
</body>

</html>

二、事件修饰符 

事件修饰符是用于修改事件监听器行为的特殊指令。它们以点号 . 结尾,用于在触发事件时执行特定的行为或修改事件的默认行为。

1.常用事件修饰符

1)事件相关修饰符

  1. .stop:阻止事件冒泡。相当于调用 event.stopPropagation()
  2. .prevent:阻止事件的默认行为。相当于调用 event.preventDefault()
  3. .capture:使用事件捕获模式,即在捕获阶段处理事件。
  4. .self:只当事件是从侦听器绑定的元素本身触发时才触发回调。如果事件是从内部元素触发的,则不触发。
  5. .once:事件只会触发一次,触发后会自动移除事件监听器。
  6. .passive:告诉浏览器该事件监听器不会调用 preventDefault()。这可以提高滚动性能。

2)键盘事件相关修饰符

  1. .enter:监听 Enter 键。
  2. .tab:监听 Tab 键。
  3. .delete.backspace:监听删除键(Backspace)。
  4. .esc:监听 Esc 键。
  5. .space:监听空格键。
  6. .up:监听上箭头键。
  7. .down:监听下箭头键。
  8. .left:监听左箭头键。
  9. .right:监听右箭头键

3)鼠标事件相关修饰符

  1. .left:监听鼠标左键点击事件。
  2. .right:监听鼠标右键点击事件。
  3. .middle:监听鼠标中键点击事件。
  4. .up:监听鼠标滚轮向上滚动事件。
  5. .down:监听鼠标滚轮向下滚动事件。

三、属性计算

使用属性计算,你可以在 Vue 实例中定义一些衍生属性,这些属性会根据 Vue 实例的响应式数据动态计算得到。这在很多情况下可以简化模板中的逻辑,使得模板更加清晰和简洁。

通过在Vue实例中在computed对象中定义方法来进行属性计算,在模板语法中方法无需加小括号()

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
</head>
<body>
    <div id="app">
        <div class="container mt-3">
             <div class="row">
                <div class="col-4">
                    <input v-model="firstName" type="text" class="form-control" placeholder="请输入姓">
                </div>
                <div class="col-4">
                    <input v-model="lastName" type="text" class="form-control" placeholder="请输入名">
                </div>
                <div class="col-4">
                    <span style=" font-size: 22px;text-decoration: underline;">{{fullName}}</span>
                </div>
             </div>
        </div>
        <hr>
        <div class="container">
             <input class="form-control" type="number" v-model="num">
             <button class="btn btn-success mt-2">计算 {{num}} 乘以 2 等于 {{doubleValue}} </button>
        </div>

    </div>
    <script src="./libs/vue.js"></script>
    <script>


        //禁止控制台输出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //挂载容器
            el: "#app",
            // 设置数据
            data: {
                firstName: "",// 姓
                lastName: "",//名
                num: 0
            },
            // 属性计算 (只读不写)
            // 例如: fullName , doubleValue这些属性是不可以修改的
            // 错误:  this.fullName = "xxx"
            // 此处是对象
            computed: {
                // 在这个对象中写方法,这个方法名称就可以作为属性,retrun的值就是计算的结果
                // 全名
                // fullName: {
                //     get(){
                //         return this.firstName + this.lastName
                //     }
                // },
                fullName(){
                    return this.firstName + this.lastName;
                },
                // 获取双倍的值
                doubleValue(){
                    return this.num * 2;
                }
            }

        })
    </script>
</body>
</html>

四、属性监听

 在vue实例中在watch对象中来监听 Vue 实例上的数据变化,并在数据变化时执行自定义的方法。通过属性监听,你可以监视一个或多个属性的变化,并在这些属性发生变化时执行相应的操作。

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
</head>

<body>
    <div id="app">
        <div class="container mt-3">
            <input v-model="city" type="text" placeholder="请输入城市" class="form-control">
        </div>

        <div class="container mt-3">
            <ul>
                <li @click="play(1)">歌曲1</li>
                <li @click="play(2)">歌曲2</li>
                <li @click="play(3)">歌曲3</li>
                <li @click="play(4)">歌曲4</li>
            </ul>
        </div>
        <div class="container mt-3">
            <button @click="addAge" class="btn btn-success">改变用户年龄</button>
        </div>

    </div>
    <script src="./libs/vue.js"></script>
    <script>
        // 属性侦听
        // 主要是观察数据的变化,只要数据发生改变,就执行相关的回调函数
        // data、路由等数据发生改变,就可以执行对应的回调,往往用于处理一些异步的操作
        // 例如: 根据城市名称查询天气信息,根据歌曲id获取歌曲信息

        //禁止控制台输出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //挂载容器
            el: "#app",
            data: {
                city: "广州",
                music_id: "",
                user: {
                    age: 20
                }
            },
            // 侦听器
            // 侦听器、属性侦听不是计算结果,不用写return 
            // 这些回调函数的名称就是属性名称,例如data: {city: music_id,user 。。。。}
            watch: {
                // 观察city属性的变化
                city: {
                    // nValue(改变之后的数据),oValue(改变之前的数据) 可选参数
                    handler(nValue, oValue) {
                        console.log("观察city是否发生改变....")
                    }
                },
                music_id: {
                    handler(nValue, oValue) {
                        console.log("观察music_id是否发生改变....", nValue)
                    }
                },
                // 遇到引用数据类型的时候,考虑使用深度侦听
                user: {
                    deep: true,// 深度侦听
                    immediate: true, // 立即执行
                    handler(nValue, oValue) {
                        console.log("观察user.age是否发生改变....", nValue.age)
                    }
                }
            },
            // 设置方法
            methods: {
                play(id) {
                    this.music_id = id;
                },
                addAge() {
                    this.user.age++;
                }

            }
        })
    </script>
</body>

</html>

在本案例中监听一个对象中的一个属性值的变化中用到了两个常用的修饰符

1.deep:当你想要深度监听对象内部属性的变化时,可以使用 deep 修饰符 。默认情况下,watch 只会监听对象的引用变化,而不会递归监听对象内部属性的变化。

2.immediate:当你想要在声明监听时立即执行一次监听函数时,可以使用 immediate 修饰符

五、属性过滤

通过在vue实例的filter对象 中自定义方法来返回一个过滤正则,可以在模板中使用属性过滤器来动态地对数据进行处理,然后将处理后的数据显示在视图中。Vue 中的属性过滤器通过在模板中使用管道符 | 来实现,语法格式为 {{ expression | filterName }}

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
</head>
<body>
    <div id="app">
        <div class="container mt-3">
             <h3>{{str}}</h3>
             <h3>{{str | xxx }}</h3>
             <h3>{{str | yyy }}</h3>
             <h3>{{str | xxx | zzz }}</h3>
        </div>

    </div>
    <script src="./libs/[email protected]/vue.js"></script>
    <script>


        //禁止控制台输出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //挂载容器
            el: "#app",
            data: {
                str: "abc123efg456"
            },
            // 过滤器
            // 就是可以作为工具函数来使用哦~~~
            // 通过 “|” 填写过滤器,让其执行相关的回调函数,在函数作用域中可以把处理结果返回
            filters: {
                // 编写xxx回调函数
                xxx(value){
                    // console.log(this);// window
                    // 去掉所有数字字符
                    return value.replace(/\d/g,'');
                },
                yyy(value){
                    // console.log(this);// window
                    // 去掉所有字母字符
                    return value.replace(/[a-z]/ig,'');
                },
                zzz(value){
                    // 把字母转大写
                    return  value.toUpperCase();
                }
            }
        })
    </script>
</body>
</html>

 

         

标签:el,Vue,前端,修饰符,小白,事件,Vue2,监听,属性
From: https://blog.csdn.net/weixin_245249828/article/details/137565933

相关文章

  • 目标检测:yolov8(ultralytics)训练自己的数据集,新手小白也能学会训练模型,一看就会
    目录1.环境配置2.数据集获取2.1网上搜索公开数据集2.2自制数据集2.2.1Labelimg安装2.2.2Labelimg使用2.3数据集转换及划分2.3.1数据集VOC格式转yolo格式2.3.2数据集划分3.训练模型3.1创建data.yaml3.2训练模型4.模型测试5.可视化界面分为4部分,......
  • 基于JAVA Springboot + Vue 前端后分离 实现【考研资讯平台】(内附设计LW + PPT+ 源码
    项目名称项目名称:考研资讯平台项目技术栈该项目采用了以下核心技术栈:后端框架/库:SpringBoot数据库:MySQL前端技术:Vue.js(前后端分离)项目展示5.1学生前台功能模块5.1.2首页在系统首页可以查看以下内容:首页考研资讯报考指南资料信息论坛信息我的跳转到后台购物......
  • 基于JAVA Springboot + Vue 前端后分离 实现【教师人事档案管理系统】(内附设计LW + PP
    项目名称项目名称:教师人事档案管理系统项目技术栈该项目采用了以下核心技术栈:后端框架/库:Java数据库:MySQL前端技术:Vue.js(前后端分离)开发工具:Eclipse项目展示5.1前台功能模块前台首页在教师人事档案管理系统首页可以查看以下内容:首页培训信息系统公告个人中心......
  • HTML重要标签重点及属性——之转生在异世界学前端
    表格标签table是用于定义表格的标签tr是用于定义表格的行td是用来定义表格的列,th是表头一般只有一个表头会加粗表格属性border是设置边框值为1;1是有边框,align设置居中对齐方式center,left,rightcellpadding设置文字跟单元格的间隔cellspacing设置单元格直接的间隔  ......
  • 第 9 场 小白入门赛 字典树考试
    题目:4.字典树考试【算法赛】-蓝桥云课(lanqiao.cn)思路:我们可以先抛开题目,想一下一个二进制数是111111111 --->9个1,题目说(Ai&Aj)所以两个1一个组合,我们用最笨的方式取枚举----->是8+7+6+5+.......+1是36两两一组,想想X个1如何算呢?是不是应......
  • 前端补充:url编码
    一、URL解码/编码详解当URL路径或者查询参数中,带有中文或者特殊字符的时候,就需要对URL进行编码(采用十六进制编码格式)。URL编码的原则是使用安全字符去表示那些不安全的字符。安全字符,指的是没有特殊用途或者特殊意义的字符。二、URL基本组成URL是由一些简单的组件......
  • 前端-题目集合
    1.前端开发:JS事件循环机制  事件循环什么是事件循环(EventLoop)?众所周知,Javascript是一门单线程的语言,单线程即同一时间只能做一件事,但这并不意味着JavaScript在执行代码的过程中就会一直阻塞,而解决单线程不阻塞的这个机制就叫做事件循环(EventLoop),也就是......
  • 前端面试题 — 浏览器安全问题
    1.什么是XSS攻击?如何防范XSS攻击?XSS攻击是一种跨站脚本攻击,攻击者通过在网页中注入恶意脚本来获取用户信息或控制页面。防范XSS攻击的方法包括对用户输入进行过滤和转义、使用HTTP头部中的ContentSecurityPolicy(CSP)等。2.什么是CSRF攻击?如何防范CSRF攻击?CSRF攻击是一种跨......
  • srs+webrtc实现浏览器直播(仿b站页面,纯前端)
    关于srs请看我之前的博客,SRS实现网页和手机端简单直播。与之不同的是,浏览器推流需要使用werbrtc,因此只需要按srs官网配置即可,WebRTC|SRS(ossrs.net)。回到正题... 一.页面搭建b站web直播页面是通过video标签元素实现,但是video并不能同时将摄像头、麦克风、屏幕共享等同时......
  • xmlhttprequest upload 实现前端上传进度
    elementuiupload代码片段exportdefaultfunctionupload(option){if(typeofXMLHttpRequest==='undefined'){return;}constxhr=newXMLHttpRequest();constaction=option.action;if(xhr.upload){xhr.upload.onprogress=......