vue--常用指令和事件修饰符(二)

简介: vue--常用指令和事件修饰符

v-on


点击事件,要写在methods里面

事件处理方法

  • 完整格式:v-on:事件名=“函数名” 或 v-on:事件名="函数名(参数...)"
  • 缩写格式:@事件名="函数名" 或 @事件名="函数名(参数)"    注意@后面没有:
  • event:函数中的默认形参,代表原生DOM事件,当调用的函数有多个参数传入时,需要使用原生DOM事件,则通过$event作为实参传入,用于监听DOM事件
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
    <div id="app">
        <h3>1. 事件处理方法 v-on 或 @</h3>
        <button v-on:click="say">Say {{msg}}</button>
        <!-- $event代表的是原生 的Dom事件 -->
        <button @click="warn('hello', $event)">Warn</button>
    </div>
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: 'Hello World!!',
                num: 0
            },
            methods: { //定义事件处理函数
                say: function (event) {
                    // event代表的是Dom原生事件, Vue.js它会自动 的将它传入进来,
                    alert(this.msg)
                    alert(event.target.innerHTML)
                },
                warn: function (name, event) {
                    //如果说函数有多个参数,而双需要使用原生事件,则需要使用 $event 作为 参数传入
                    alert(name + ',' + event.target.tagName)
                }
            }
        })
    </script>
</body>
</html>
事件修饰符

  • .stop阻止单击事件继续传播
  • .prevent阻止事件默认行为
  • .once点击事件只会触发一次
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
    <div id="app">
        <h3>2. 事件修饰符</h3>
        <!-- 2.1 防止单击事件继续传播 -->
        <div @click="todo">  <!-- 点击doThis之后还会触发todo事件 -->
            <button @click="doThis">单击事件会继续传播</button>
        </div>
        <br>
        <div @click="todo">
            <!-- .stop作用:是阻止事件的传播,点击doThis之后不会触发todo事件 -->
            <button @click.stop="doThis">阻止单击事件会继续传播</button>
        </div>
        <br>
        <!-- 2.2 阻止事件的默认行为,不加prevent会跳转到百度 -->
        <a href="http://www.baidu.com" @click.prevent="doStop">百度</a>
        <!-- 2.3 点击事件只会触发一次 -->
        <button @click.once="doOnly">点击事件只会触发一次:{{num}}</button>
    </div>
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                num: 0
            },
            methods: { //定义事件处理函数
                doThis: function () {
                    alert('doThis....')
                },
                todo: function () {
                    alert('todo....')
                },
                doStop: function () {
                    alert('doStop...href默认行为已经被阻止')
                },
                doOnly: function () {
                    this.num ++ 
                }
            },
        })
    </script>
</body>
</html>
按键修饰符

  • 格式: v-on:keyup.按键名 或 @keyup.按键名
  • 常用按键名
  •   .enter   .tab   .delete    .esc    .space    .up    .down    
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
    <div id="app">
        <h3>按键修饰符或按键码</h3>
        <!-- 回车键可以用做提交表单数据,比如搜索框 -->
        <input type="text" @keyup.enter="keyEnter">
        <input type="text" @keyup.space="keySpace">
        <input type="text" @keyup.13="keyCode">
    </div>
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            methods: { //定义事件处理函数
                keyEnter: function () {
                    alert('当前按的是回车键')
                },
                keySpace: function() {
                    alert('当前按的是空格键')
                },
                keyCode: function () {
                    alert('按的是13')
                }
            },
        })
    </script>
</body>
</html>

例子二

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-Type" charset="UTF-8">
    <title>Title</title>
    <script src="../static/vue.min.js"></script>
    <style>
         .active{
                 color: red;
                  }
    </style>
</head>
<body>
   <div id="app">
        <h1 :class="{active: isActive}">钢铁侠</h1>  <!-- 添加class属性为active -->
        <button v-on:click="ChangeColor">点我让钢铁侠变红</button>
   </div>
   <script>
        new Vue({
           el:"#app",
           data:{
               isActive: false
           },
            methods:{
               ChangeColor:function () {
                   this.isActive = !this.isActive; // 取反
               },
            }
           }
               )
   </script>
</body>
</html>


v-bind


通过class列表和style指定样式是数据绑定的一个常见需求,他们都是元素的属性,都用v-bind处理,其中表达式结果的类型可以是:字符串,对象或数组

语法格式

  • v-bind:class="表达式" 或 :class="表达式"

class的表达式可以为:

  • 字符串  :class="activeClass"
  • 对象  :class="{active:isActive,error:hasError}"
  • 数组 :class="['active','error']"   注意要加上单引号,不然获取的是data中的值

style的表达式一般为对象

  • :style="{color:activeColor,fontSize+'px'}"
  • 注意:对象中的value值activeColor和fontSize是data中的属性

例子一:

<!DOCTYPE html>
<html lang="en">
<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>Document</title>
    <script src="./node_modules/vue/dist/vue.js"></script>
    <style>
        .active{
            color:green;
        }
        .delete{
            background: red;
        }
        .error{
            font-size: 35px;
        }
    </style>
</head>
<body>
    <div id="app">
        <h3>Class绑定,v-bind:class 或者 :class</h3>
        <!-- <p class="active">字符串表达式</p>  -->
        <p v-bind:class="activeClass">字符串表达式</p>
        <!-- key值是样式名,value是data中绑定的属性 -->
        <!-- 当isDelete为true的时候,delete就会进行渲染 -->
        <p :class={delete:isDelete,error:hasError}> 对象表达式</p>
        <p :class="['active','error']">数组表达式</p>
        <h3>Style绑定,v-bind:style 或 :style</h3>
        <p :style="{color: activeColor, fontSize: fontSize + 'px'}">Style绑定</p>
    </div>
    <script>
       new Vue({
           el: "#app",
           data: {
               activeClass: 'active',
               isDelete: false,
               hasError: true,
               activeColor: 'red',
                fontSize: 100
           }
       })
    </script>
</body>
</html>

例子二:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-Type" charset="UTF-8">
    <title>Title</title>
<!--    引用vue-->
    <script src="../static/vue.min.js"></script>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: red;
        }
        .active{
            background-color: green;
        }
    </style>
</head>
<body>
   <div id="app">
    <button v-on:click = 'handlerChange'>切换颜色</button>
   <!--v-bind 标签中所有的属性 img标签src alt,a标签的href title id class-->
    <img v-bind:src="imgSrc" v-bind:alt="msg">
    <div class="box" v-bind:class = '{active:isActive}'></div>
</div>
<script>
    new Vue({
        el: '#app',
        data() {
            return {
                imgSrc:'./1.jpg',
                msg:'美女',
                isActive:true
            }
        },
        methods:{
            handlerChange(){
               this.isActive = !this.isActive;
            },
        }
    })
</script>
</body>
</html>

<div class="box" v-bind:class = '{active:isActive}'></div>

div原来有一个class属性,值只有一个box,通过v-bind绑定了一个属性active,isActive为true时把active添加到class里,为false时不添加


<button v-on:click = 'handlerChange'>切换颜色</button>

绑定了一个v-on的click事件,当第一次点击按钮时,去methods里找handlerChange,因为刚开始isActive为true(data里),点击后取反为false,
这时data里的也为false,所以没有active属性
v-on和v-bind的简写

v-bind可以简写为 : v-on可以简写为@

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="content-Type" charset="UTF-8">
    <title>Title</title>
<!--    引用vue-->
    <script src="../static/vue.min.js"></script>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: red;
        }
        .active{
            background-color: green;
        }
    </style>
</head>
<body>
   <div id="app">
     <button @mouseenter = 'handlerChange' @mouseleave = 'handlerLeave'>切换颜色</button>
   <!--v-bind 标签中所有的属性 img标签src alt,a标签的href title id class-->
    <img :src="imgSrc" :alt="msg">
    <div class="box" :class = '{active:isActive}'></div>
</div>
<script>
//    v-bind和v-on的简便写法 :  @
    new Vue({
        el: '#app',
        data() {
            return {
                imgSrc:'./1.jpg',
                msg:'美女',
                isActive:true
            }
        },
        methods:{
            handlerChange(){
                this.isActive = false;
            },
            handlerLeave(){
                this.isActive = true;
            }
        }
    })
</script>
</body>
</html>

相关文章
|
5月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
506 2
|
4月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
427 137
|
8月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
977 0
|
8月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
7月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
565 1
|
7月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
390 0
|
8月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
596 17
|
8月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
442 1
|
8月前
|
存储 JavaScript 前端开发
如何高效实现 vue 文件批量下载及相关操作技巧
在Vue项目中,实现文件批量下载是常见需求。例如文档管理系统或图片库应用中,用户可能需要一次性下载多个文件。本文介绍了三种技术方案:1) 使用`file-saver`和`jszip`插件在前端打包文件为ZIP并下载;2) 借助后端接口完成文件压缩与传输;3) 使用`StreamSaver`解决大文件下载问题。同时,通过在线教育平台的实例详细说明了前后端的具体实现步骤,帮助开发者根据项目需求选择合适方案。
813 0
|
8月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
414 0