当前位置: 首页 > article >正文

Vue的简单入门 二

目录

一、模块语法中的指令

事件处理

v-on

 内联事件处理器

 方法事件处理器

事件参数 

 Event对象

同时传入参数和event对象

事件修饰符 

 阻止默认事件

​编辑 阻止冒泡事件

.once

.enter

数组变化的侦测

 变更方法

 替换一个数组

计算属性 (computed)

 计算属性缓存VS方法

Class绑定

绑定对象

多个对象绑定 

绑定数组 

三元运算符 

数组和对象 

Style绑定


一、模块语法中的指令

事件处理

v-on

我们可以使用v-on指令(简写为@)来监听DOM事件,并在事件触发时执行对应的JavaScript。用法:v-on:click=”methodname” 或 @click=”handler”

事件处理器的值可以是

内联事件处理器:事件被触发时执行的内联JavaScript语句(与onclick类似)

方法事件处理器:一个指向组件上定义的方法的属性名或者是路径。

 内联事件处理器
<template>
    <h2>事件处理</h2>
    <h3>内联事件处理示例</h3>
    <button v-on:click="count++">+1</button>
    <button @click="count--">-1</button>
    <p>{{count}}</p><br>
    <p>内联事件处理非重点</p>
 </template>
 
 <script>
 export default{
     data () {
         return{
            count:0
         }
     }
 }
 </script>

 结果如下:

 方法事件处理器
<template>
    <h2>事件处理</h2>
    <p>方法事件处理</p>
    <button @click="add">+1</button>
    <p>{{count}}</p>
 </template>
 
 <script>
 export default{
     data () {
         return{
            count:0
         }
     },
     methods:{
        add(){
            //读取data里面的数据:this.属性名
            this.count++;
            console.log("click");
        }
     }
 }
 </script>

  结果如下:

事件参数 

 事件参数可以获取event对象和通过事件传递参数。

 Event对象

<template>
    <h2>事件处理</h2>
    <p>方法事件处理</p>
    <button @click="add">+1</button>
    <p>{{count}}</p>
 </template>
 
 <script>
 export default{
     data () {
         return{
            count:0
         }
     },
     methods:{
        //event对象
        add(e){
            this.count++;
            //Vue中的event对象,就是原生js的Event对象
            e.target.innerHTML="add"+this.count;
        }
     }
 }
 </script>

e.target.innerHTML="add"+this.count;: 这行代码修改了触发点击事件的元素(在这个例子中是 <button> 元素)的内部 HTML 内容。e.target 指的是触发事件的具体 DOM 元素,而 innerHTML 属性用于设置或获取该元素的 HTML 内容。这行代码将按钮的文本更改为 "add" 后跟当前的 count 值。 

同时传入参数和event对象

<template>
    <h2>事件传参</h2>
    <div v-for="(value,index) in result" :key="index">
        <p @click="getname($event,value.name)">{{value.name}}-{{index}}</p>
        <img :title="value.title">
    </div>
 </template>
 
 <script>
 export default{
     data () {
         return{
            result:[
                {name:"a" ,title :"a"},
                {name:"b" ,title :"b"},
                {name:"c" ,title :"c"}
            ]
         }
     },
     methods:{
        getname(e,name){
            console.log(name);
            console.log(e);
        }
     }
 }
 </script>

结果如下 

事件修饰符 

在处理事件时调用event.preventDefault或event.stopPropagation(阻止默认事件和冒泡事件)是很常见的。尽管我们可以直接在方法内调用,但如果方法能更专注于数据逻辑而不去处理DOM事件的细节会更好。 

为解决这一问题,Vue为v-on提供了时间修饰符,常用如下:Stop,prevent,once,enter等等

 阻止默认事件
<template>
    <h1>事件修饰符</h1>
    <a href="https://baidu.com" @click="g">百度</a>
    <a href="https://baidu.com" @click.prevent>百度</a>
</template>
<script>
export default{
    data(){
        return{

        }
    },
    methods:{
        g(e){
            e.preventDefault();
            console.log("点击了");
        }
    }
}
</script>

 可见效果是一样的,事件修饰符更加简洁与方便。 

 阻止冒泡事件
<template>
    <h1>事件修饰符</h1>
    <div @click="clickDiv">
        <p @click="clickP">测试冒泡</p>
    </div>
</template>
<script>
export default{
    data(){
        return{

        }
    },
    methods:{
        g(e){
            e.preventDefault();
            console.log("点击了");
        },
        clickDiv(){
            console.log("点击了div标签");
        },
        clickP(){
            console.log("点击了p标签");
        }
    }
}
</script>

 结果如图

以上代码的问题是:在点击子标签时,父标签也会跟着冒泡,需要阻止阻止。 

<template>
    <h1>事件修饰符</h1>
    <div @click="clickDiv">
        <p @click.stop="clickP">测试冒泡</p>
    </div>
</template>
<script>
export default{
    data(){
        return{

        }
    },
    methods:{
        g(e){
            e.preventDefault();
            console.log("点击了");
        },
        clickDiv(){
            console.log("点击了div标签");
        },
        clickP(){
            console.log("点击了p标签");
        }
    }
}
</script>

 结果如图

.once

这个修饰符表示事件处理函数只会触发一次。在第一次触发之后,监听器将被移除,不再监听后续的事件触发。这在某些情况下很有用,比如你只想让用户点击一个按钮一次,或者防止表单重复提交等。

示例:<button v-on:click.once="doSomething">点击我(只响应一次)</button>

.enter

实际上,.enter 并不是Vue官方提供的一个标准事件修饰符。可能你指的是监听键盘的回车键(Enter key)事件。通常,这个可以通过检查键盘事件的keyCode或key属性来实现,但如果你是在说v-on:keyup.enter或v-on:keydown.enter这样的用法,那么这是Vue为键盘事件提供的一种便捷写法,用于监听特定的按键。

当使用.enter修饰符时,事件处理函数只会在用户按下回车键时触发。

示例:<input v-on:keyup.enter="submitForm" />

在上面的示例中,submitForm方法只会在用户在<input>元素中按下回车键时触发。 

数组变化的侦测

 变更方法

 Vue能够侦听响应式数组的变更方法,并在他们被调用时触发相应的更新。这些变更方法包括:

 以push()方法为例:

<template>
    <h3>数组侦测变化</h3>
    <button @click="adddata">add data</button>
    <p v-for="(vaule,index) in names" :key="index">{{vaule}}</p>
</template>
<script>
export default{
    data(){
        return{
            names:["iwen","weiyu","biaoge"]
        }
    },
    methods:{
        adddata(){
            //引起UI自动更新
            this.names.push("tfeng");

        }
    }
}
</script>

当点击按钮时将把元素添加在数组后面:

 替换一个数组

变更方法,就是对调用它们的原数组进行变更。

相对的,也有一些不可变方法,例如filter(),concat()和slice(),这些都不会更改原数组,而是返回一个新数组

<template>
    <h3>数组侦测变化</h3>
    <button @click="adddata">add data</button>
    <p v-for="(vaule,index) in names" :key="index">{{vaule}}</p>
</template>
<script>
export default{
    data(){
        return{
            names:["iwen","weiyu","biaoge"]
        }
    },
    methods:{
        adddata(){
            //不会引起UI自动更新
            this.names.concat(["Alice"]);
            console.log(this.names.concat(["Alice"]));
        }
    }
}
</script>

 当点击按钮时,不会引起UI自动更新,实际上concat()方法已经将元素添加在数组后面了。

 如果使用该函数,想使UI发生变化则

 将本代码改成:this.names=this.names.concat(["Alice"]);

计算属性 (computed)

模板中的表达式虽然很方便,但也只能做一些简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。因此使用计算属性来描述响应式状态的复杂逻辑。

 把模板语法里的复杂逻辑放在计算属性里,推荐操作形式:

<template>
    <h3>计算属性</h3>
    <p>{{EmptyIslength}}</p>
</template>
<script>
export default{
    data(){
        return{
            name:["1","2","3"]
        }
    },
    //计算属性
    computed:{
        EmptyIslength(){
            return this.name.length>0?"yes":"no"
        }
    }
}
</script>

 计算属性缓存VS方法

计算属性:计算属性值会基于其响应式依赖(以上为例就是name数组)被缓存。一个计算属性仅在其响应式依赖更新时才重新计算。

方法:方法调用总是在重渲染发生时再次执行函数。

Class绑定

绑定对象

 相当于::class="Object",Object:{active:Isactive,'text-dangger':hasError}

后面有单引号的原因是 ' - ' 符号不能包含在变量名内。

<template>
    <h3 :class="{active:IsActive,'text-danger':hasError}" @click="hasError=false" >Class样式绑定</h3>
</template>

<script>
export default {
    data(){
        return{
            hclass: "my-class",// 这里可以自定义你想要的类名
            IsActive:true,
            hasError:true
        }
    }
}
</script>
<style>
.active{
    color: rebeccapurple;
}
.text-danger{
    font-size: 100px;
}
</style>

结果如下 

 

多个对象绑定 

<template>
    <h3 :class="{'active':IsActive,'text_danger':hasError}" @click="hasError=false" >Class样式绑定</h3>
    <h3 :class="classObject" >Class样式绑定</h3>
</template>

<script>
export default {
    data(){
        return{
            hclass: "my-class",// 这里可以自定义你想要的类名
            IsActive:true,
            hasError:true,
            classObject:{
                active:true,
                text_danger:true
            }
        }
    }
}
</script>
<style>
.active{
    color: rebeccapurple;
}
.text_danger{
    font-size: 100px;
}
</style>

绑定数组 

<template>
    <h3 :class="{'active':IsActive,'text_danger':hasError}" @click="hasError=false" >Class样式绑定</h3>
    <h3 :class="classObject" >Class样式绑定</h3>
    <h3 :class="[arrayActive,arrhasError]" >Class样式绑定</h3>
</template>

<script>
export default {
    data(){
        return{
            hclass: "my-class",// 这里可以自定义你想要的类名
            IsActive:true,
            hasError:true,
            classObject:{
                active:true,
                text_danger:true
            },
            arrayActive:"active",
            arrhasError:"text_danger"
        }
    }
}
</script>
<style>
.active{
    color: rebeccapurple;
}
.text_danger{
    font-size: 100px;
}
</style>

 

三元运算符 

<template>
    <h3 :class="{'active':IsActive,'text_danger':hasError}" @click="hasError=false" >Class样式绑定</h3>
    <h3 :class="classObject" >Class样式绑定</h3>
    <h3 :class="[arrayActive,arrhasError]" >Class样式绑定</h3>
    <h3 :class="[IsActive?'active':'']" >Class样式绑定</h3>
</template>

<script>
export default {
    data(){
        return{
            hclass: "my-class",
            IsActive:true,
            hasError:true,
            classObject:{
                active:true,
                text_danger:true
            },
            arrayActive:"active",
            arrhasError:"text_danger"
        }
    }
}
</script>
<style>
.active{
    color: rebeccapurple;
}
.text_danger{
    font-size: 100px;
}
</style>

 

数组和对象 

<template>
    <h3 :class="{'active':IsActive,'text_danger':hasError}" @click="hasError=false" >Class样式绑定</h3>
    <h3 :class="classObject" >Class样式绑定</h3>
    <h3 :class="[arrayActive,arrhasError]" >Class样式绑定</h3>
    <h3 :class="[IsActive?'active text_danger':'']" >Class样式绑定</h3>
    <h3 :class="[IsActive?'active':'',{text_danger : hasError}]" >Class样式绑定</h3>
</template>

<script>
export default {
    data(){
        return{
            hclass: "my-class",// 这里可以自定义你想要的类名
            IsActive:true,
            hasError:true,
            classObject:{
                active:true,
                text_danger:true
            },
            arrayActive:"active",
            arrhasError:"text_danger"
        }
    }
}
</script>
<style>
.active{
    color: rebeccapurple;
}
.text_danger{
    font-size: 30px;
}
</style>

温馨提示:

数组和对象嵌套过程中,只能是数组嵌套对象,不能反其道而行。

Style绑定

和class绑定类似:绑定对象,绑定数组。


http://www.kler.cn/a/552452.html

相关文章:

  • DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入)
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 18
  • Spring容器扩展点
  • 新手小白学习docker第十弹-------Docker微服务实战
  • LLM 概述
  • 轨迹流动,实现语音转文字
  • tailwindcss学习01
  • 【图像加密解密】空间混沌序列的图像加密解密算法复现(含相关性检验)【Matlab完整源码 2期】
  • 夜莺监控发布 v8.beta5 版本,优化 UI,新增接口认证方式便于鉴权
  • 公牛充电桩协议对接单车汽车平台交互协议外发版
  • FFmpeg + Nginx + HLS流媒体播放方案
  • 深入理解TT无人机曲线飞行和挑战卡飞行+EP机甲全面运动
  • 【Windows软件 - HeidiSQL】导出数据库
  • Linux系统资源监控:全面掌握目录、文件、内存和硬盘使用情况
  • C++基础知识学习记录—string类
  • lwip和tcp/ip区别
  • 鸿蒙NEXT开发-沉浸式导航和键盘避让模式
  • Ubuntu 20 掉显卡驱动的解决办法
  • 利用 UniApp 实现带有渐变背景的盒子
  • mysql和minio