【Vue】Re04 指令:第二部分
一、v-on指令
作用是用来将元素绑定事件监听器,触发特定的函数执行一定功能
关键字:事件监听
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="app">
<p> <button v-on:click='theTest'>点我触发事件</button></p>
<p> <button @click='theTest'>点我触发事件(@缩写语法)</button></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
let vm = new Vue({
el : '#app',
data : {
aaa : '233'
},
methods : {
theTest : function ( ) {
alert(this.aaa);
}
}
});
</script> </body>
</html>
v-on事件绑定的函数中参数传递的问题:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="v">
<!-- 演示事件监听 + 参数执行 -->
<button @click="fun01" >按钮01</button>
<button @click="fun01()">按钮02</button> <hr> <!-- 带参指向 -->
<button @click="fun02(100)">按钮03</button>
<button @click="fun02">按钮04</button> <hr> <!-- 打印事件 -->
<button @click="fun03(222)">按钮05</button>
<button @click="fun03">按钮06</button> <!-- 如果不注入参数调用打印,可以发现是一个事件在这个里面 --> <hr> <!-- 如果存在多个参数 手动获取浏览器事件对象,需要使用$event注入 -->
<button @click="fun04($event, 222)">按钮07</button>
<button @click="fun04">按钮08</button> <hr> <button>按钮7</button>
<button>按钮08</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
message : 'Hello',
},
methods : {
fun01 : function () {
console.log('无参调用测试');
},
fun02 : function (val) {
console.log('带参调用测试');
},
fun03(abc) {
console.log(abc);
},
fun04(event, abc) { // Vue默认第一个参数即为事件对象
console.log(event);
console.log(abc);
}
}
});
</script> </body>
</html>
常用的修饰符使用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="v">
<div @click="function02">
<button @click="function01">testing1</button>
</div> <!-- 我们点击按钮,函数01和函数02都会被触发,这样的状况被称为冒泡 --> <hr> <!-- 如果我们希望其中的一个不要被触发,可以使用.stop进行修饰 -->
<div @click="function02"> <!-- 对div设置无效 -->
the div tag content
<button @click.stop="function01">testing2</button> <!-- 例如这里只让div上的事件生效 只要点击按钮才会让函数1生效 -->
</div> <hr> <!-- .prevent修饰符用于阻止默认事件的触发 -->
<form action="#">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit" @click.prevent="function01" > <!-- 阻止表单提交,更改为使用自定义函数 -->
</form> </div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
message : 'sss'
},
methods : {
function01() {
console.log(' function01 -> ' + this.message);
},
function02() {
console.log(' function02 -> ' + this.message);
}
}
});
</script> </body>
</html>
二、v-if、v-else-if、v-else指令
用于条件判断控制元素是否显示出来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <!-- v-if v-else-if v-else -->
<div id="app"> <p> <button @click="changeFlag">点我切换</button> </p>
<p v-if="flag" > flag为true则显示此信息</p> <p> <button @click="changeScore">测试v-else-if</button> </p> <!-- 当指令的值符合为true时创建dom进行渲染,否则移除dom元素 -->
<p v-if="score == 100">100分</p>
<p v-else-if="score == 90">90分</p>
<p v-else-if="score == 80">80分</p>
<p v-else-if="score == 70">70分</p>
<p v-else-if="score == 60">60分</p>
<p v-else>不及格</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
let vm = new Vue({
el : '#app',
data : {
flag : true,
score : 100
},
methods : {
changeFlag : function () {
this.flag = !this.flag;
},
changeScore : function () {
this.score -= 10;
}
}
});
</script> </body>
</html>
切换登录凭证的小案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="v">
<p>
<span v-if="isUser">
<label for="username">用户名称:</label>
<input type="text" id="username" placeholder="用户名称">
</span>
<span v-else>
<label for="email">邮箱账号:</label>
<input type="text" id="email" placeholder="邮箱账号">
</span> <button @click="changeLoginWay" >切换登录方式</button>
<button @click="isUser = !isUser" >切换登录方式[简写]</button>
</p>
</div>
<!--<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
<script src="./../dependencies/vue.js"></script>
<script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
isUser : true
},
methods : {
changeLoginWay() {
this.isUser = !this.isUser;
}
}
});
</script> </body>
</html>
解决Input元素复用的问题
我们发现在用户名输入框输入字符时,切换到邮箱账号
发现输入的字符被Vue保存在邮箱账号的输入框中

也许真实的需求中就是希望这样实现
但是一般情况应该是删除清空的
解决办法是使用Key属性作为区分的标识:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="v">
<p>
<span v-if="isUser">
<label for="username">用户名称:</label>
<input type="text" id="username" placeholder="用户名称" key="username">
</span>
<span v-else>
<label for="email">邮箱账号:</label>
<input type="text" id="email" placeholder="邮箱账号" key="email">
</span> <button @click="changeLoginWay" >切换登录方式</button>
<button @click="isUser = !isUser" >切换登录方式[简写]</button>
</p>
</div>
<!--<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
<script src="./../dependencies/vue.js"></script>
<script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
isUser : true
},
methods : {
changeLoginWay() {
this.isUser = !this.isUser;
}
}
});
</script> </body>
</html>
三、v-show指令
决定指令绑定的元素是否需要在页面中显示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <!-- v-show是纯粹的v-if -->
<div id="app">
<p v-show="!flag"> show this tag 1 </p>
<p v-show="100 > 2"> show this tag 2 </p>
<p v-show="true == true"> show this tag 3 </p>
<p v-show="false == false"> show this tag 4 </p>
<p v-show="2 < 1"> show this tag 5 </p>
</div>
<!--
v-if 和 v-show的区别
虽然二者都是判断条件来实现元素的是否显示在浏览器上
但是:
v-if是直接不创建dom元素实现
v-show是创建了dom元素但是使用display:none属性进行了隐藏处理 适用的场景,如果需要频繁的显示隐藏元素的话更适合使用v-show处理
如果使用v-if则需要反复创建dom可能造成内存浪费
-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!--<script src="./../dependencies/vue-min.js"></script>-->
<script type="text/javascript">
let vm = new Vue({
el : '#app',
data : {
flag : true
}
});
</script> </body>
</html>
注意v-show和v-if的区别:
v-if 和 v-show的区别 虽然二者都是判断条件来实现元素的是否显示在浏览器上
但是: v-if是直接不创建dom元素实现 v-show是创建了dom元素但是使用display:none属性进行了隐藏处理
适用的场景,如果需要频繁的显示隐藏元素的话更适合使用v-show处理
如果使用v-if则需要反复创建dom可能造成内存浪费
四、v-for指令
普通数组遍历
对象属性遍历
对象数组遍历
索引获取,key + value获取
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="v">
<!-- 普通遍历使用 -->
<ul>
<li v-for="n in names">{{n}}</li>
</ul> <!-- 获取索引下标 index, 这里的索引是第二参数即可 -->
<ul>
<li v-for="(n, i) in names">{{i}} - {{n}}</li>
</ul> <!-- 遍历对象的属性和值 -->
<ul><!-- 只有一个参数,获取的是值 -->
<li v-for="k in obj">{{k}}</li>
</ul>
<ul><!-- 两个参数 参数1是属性值,参数二是属性名,获取的是值 -->
<li v-for="(v, k) in obj">{{k}} {{v}}</li>
</ul>
<ul><!-- 便利对象属性也支持获取下标 -->
<li v-for="(v, k, i) in obj">{{i}} {{k}} {{v}}</li>
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
names : ['wan', 'why', 'james'],
obj : {
name : '杰哥',
age : 24,
gender : false
}
}, });
</script> </body>
</html>
五、v-model
关键字:双向绑定
该指令本质时 v-on + v-bind的结合,为方便开发的一个语法糖
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <!-- v-model指令,一般用于表单数据提交处理 ,使用v-model用来实现数据和表单元素的双向绑定 -->
<!-- 可以理解为 v-bind 是单向绑定 vue对象对dom更新 -->
<!-- 而 v-model 是双向绑定 vue对象和dom双方都可以实现更新 -->
<div id="vue-app">
<h3>{{text_value}}</h3>
<p>无V-MODEL输入 <input type="text" :value="text_value"> </p> <!-- 使用v-bind绑定数据只能让vue对象的属性更改,如果是用户对dom输入更改的数据将不会更新 -->
<p>有V-MODEL输入 <input type="text" v-model="text_value"> </p> <!-- 使用v-model之后 输入标签控制的元素也能对数据更新了 --> <!-- 使用函数注入事件对象监听获取 实现绑定 -->
<p>使用函数事件对象进行绑定 <input type="text" :value="text_value" @input="listenInputChanges"> </p>
<!-- 简写在事件绑定中获取 -->
<p>使用函数事件对象进行绑定 <input type="text" :value="text_value" @input="text_value = $event.target.value"> </p> <!-- 绑定select标签 -->
<p>
<select name="" id="" v-model="program_lang">
<option value="Java">Java</option>
<option value="C/C++">C/C++</option>
<option value="C#">C#</option>
<option value="Python">Python</option>
<option value="PHP">PHP</option>
<option value="Rust">Rust</option>
<option value="Ruby">Ruby</option>
<option value="Julia">Julia</option>
</select>
</p>
</div>
<!-- <script type="text/javascript" src="../dependencies/vue.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
let vm = new Vue({
el : '#vue-app',
data : {
text_value : '文本值',
program_lang : 'Julia' /* 设置的是默认选中的值 */
},
methods : {
listenInputChanges(eventsObject) {
this.text_value = eventsObject.target.value;
}
}
});
</script> </body>
</html>
修饰符的使用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <!-- v-model修饰符 -->
<div id="v">
<p>原始model <input type="text" v-model="message"></p>
<p v-text="message"></p>
<!-- 有时候我们不希望立刻更新model绑定输入的值,所以需要延迟或者非立即性的加载 -->
<!-- 使用.lazy修饰进行延缓处理 --> <p>使用lazy修饰 <input type="text" v-model.lazy="lazyMessage"></p>
<p v-text="lazyMessage"></p>
<!-- lazy修饰符,使用后在失去焦点和Enter回车后才刷新渲染 --> <p>无number修饰 <input type="text" v-model="num"> </p>
<p>{{num}} {{typeof num}}</p>
<!-- .number用于处理属性的数据类型 -->
<p>number修饰 <input type="text" v-model.number="num2"> </p>
<p>{{num2}} {{typeof num2}}</p> <!-- 默认就支持? -->
<p>无trim清除 <input type="text" v-model="trimTest"> </p>
<p v-text="trimTest"></p>
<p>trim清除 <input type="text" v-model.trim="trimTest2"> </p>
<p v-text="trimTest2"></p>
</div>
<!-- <script type="text/javascript" src="../dependencies/vue.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const v = new Vue({
el : '#v',
data : {
message : '',
lazyMessage : '',
num : '',
num2 : '',
trimTest : ' wqe qeq ',
trimTest2 : ' wqe qeq ',
}, });
</script> </body>
</html>
【Vue】Re04 指令:第二部分的更多相关文章
- vue学习指南:第二篇(详细Vue基础) - Vue的指令
一. Vue 的介绍 1. vue是一个 mvvm 的框架.(面试官经常会问的),angular 是 mvc的框架. 2. vm 是 vum 的实例,这个实例存在计算机内存中,主要干两件大事: 1. ...
- vue之指令篇 ps简单的对比angular
这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precom ...
- 使用Vue自定义指令实现Select组件
完成的效果图如下: 一.首先,我们简单布局一下: <template> <div class="select"> <div class="i ...
- Vue的指令和成员
目录 Vue的指令和成员 指令 表单 斗篷 条件 循环 成员 计算成员 监听成员 Vue的指令和成员 指令 表单 表单指令一般是和属性指令联合使用的,最常见的就是v-model="变量&qu ...
- vue自定义指令
Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...
- vue 自定义指令的使用案例
参考资料: 1. vue 自定义指令: 2. vue 自定义指令实现 v-loading: v-loading,是 element-ui 组件库中的一个用于数据加载过程中的过渡动画指令,项目中也很少需 ...
- vue的指令
我之前学了学angular 发现angular和vue的指令有点类似 先说一下 new Vue({ el: "#box", // element(元素) 当前作 ...
- vue自定义指令用法总结及案例
1.vue中的指令有哪些?
- vue之指令
一.什么是VUE? 它是构建用户界面的JavaScript框架(让它自动生成js,css,html等) 二.怎么使用VUE? 1.引入vue.js 2.展示HTML <div id=" ...
- vue自定义指令(Directive中的clickoutside.js)的理解
阅读目录 vue自定义指令clickoutside.js的理解 回到顶部 vue自定义指令clickoutside.js的理解 vue自定义指令请看如下博客: vue自定义指令 一般在需要 DOM 操 ...
随机推荐
- JVM面试篇(下)
垃圾收集器 简述 Java 垃圾回收机制 在 java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行.在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行 ...
- 机器学习算法(一):1. numpy从零实现线性回归
系列文章目录 机器学习算法(一):1. numpy从零实现线性回归 机器学习算法(一):2. 线性回归之多项式回归(特征选取) @ 目录 系列文章目录 前言 一.理论介绍 二.代码实现 1.导入库 2 ...
- xv6 的锁机制
LOCK 公众号:Rand_cs 锁,大家应该很熟悉了,用来避免竞争,实现同步.本文以 xv6 为例来讲解锁本身是怎么实现的,废话不多说,先来看一些需要了解的概念: 一些概念 公共资源:顾名思义就是被 ...
- ES 关于 remote_cluster 的一记小坑
最近有小伙伴找到我们说 Kibana 上添加不了 Remote Cluster,填完信息点 Save 直接跳回原界面了.具体页面,就和没添加前一样. 我们和小伙伴虽然隔着网线但还是进行了深入.详细的交 ...
- Spring源码——AOP实现原理
引言 Spring AOP(Aspect Orient Programming),AOP翻译过来就是面向切面编程,它体现的是一种编程思想,是对面向对象编程(OOP)的一种补充. 在实际业务开发过程中, ...
- 在线IP归属地查询工具
在线IP地址归属地查询工具,通过该工具可以查询指定IP的物理地址或域名服务器的IP和物理地址,及所在国家或城市IP归属地,数据为纯真IP. 在线IP归属地查询工具
- Eclipse build js卡死 Eclipse 编译太卡,耗时太长解决
Eclipse build js卡死 Eclipse 编译太卡,耗时太长解决 问题描述:编译停止在js编译中,原来是js的问题 1.首选项-javaScript-Validator-Errors/Wa ...
- TXT文本文件存储
用解析器解析出数据之后,接下来就是存储数据了.保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如 TXT.JSON.CSV 等.另外,还可以保存到数据库中,如关系型数据库 MySQL,非关系 ...
- 向Web服务器端上传文件
server.py import flaskapp = flask.Flask(__name__)@app.route('/upload', methods=['POST'])def uploadFi ...
- redis基本数据结构-有序集合
redis基本数据结构-有序集合zset 特性 使用哈希表+跳表数据结构存储 每个元素由 分数和字段名 两部分组成 增加元素 zadd key score1 member1 [score2 membe ...