【Vue常用指令】
"@
Vue.js官方给自己的定义为数据模版引擎,并给出了一套渲染数据的指令。本文将详细介绍Vue.js的常用指令
导入vue.js
https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js
Vue.js使用了基于HTML的模版语法,使用vue最简单的方式就是渲染数据,渲染数据最常见的形式就是使用"Mustache"语法(双大括号)的文本插值。
- - - - - - - - - - - - - - - - - - - - - -
一个简单的示例:
<body>
<div id="sign">{{ message }}</div>
<script>
let sign = new Vue({
el: '#sign',
data: {
message: 'Hello Vue!',
},
});
</script>
</body>
首先,创建一个vue实例,并在创建实例的过程中传入一个对象。
·
该对象的第一个属性名为el,它的值是我们需要渲染的目标标签,我们通过属性查找定位这个标签。
·
该对象的第二个属性名为data,里面就是我们要渲染给浏览器标签的数据,另外还有其它属性。
- - - - - - - - - - - - - - - - - - - - - -
看了上面的代码,可能大家觉得vue也不过如此,原生js代码两行就能完成的事情,vue需要6行代码来实现,还是原生js比较简洁,其实,上面的代码只是给大家演示了挂档的技术,究竟是汽车比较快,还是骑马比较好,我们通过后面的不断学习,来解释这个问题。
接下来,我们来介绍踩油门的技术。
上面的代码中,我们演示了如何将数据渲染进DOM标签,vue帮助我们找到标签并且渲染,对于程序员来说,我们不再需要重复的找标签,绑定事件,然后再找标签,再绑定事件这样的工作了,vue帮我们都做好了,我们只需要关注具体的数据,以及业务逻辑。这也是vue给自己的定位,数据模板引擎。
它是引擎,引擎帮助我们驱动数据渲染到模板。
所以,vue的大部分内容,都是为了渲染数据用的,接下来,我们介绍vue中用来渲染数据的常用指令。
v-html
双大括号语法无法渲染HTML标签,我们需要使用v-html.
<body>
<div id="sign" v-html="info"></div>
<script>
let sign = new Vue({
el: '#sign',
data: {
info: '<h1>Hello Vue!</h1>',
}
})
</script>
</body>
v-text
类似双大括号语法渲染数据的另一种方式是使用v-text.
<body>
<div id="sign" v-text="info"></div>
<script>
let sign = new Vue({
el: '#sign',
data: {
info: 'Hello Vue!',
},
});
</script>
</body>
v-for
接下来,我们看看数组和对象的渲染方式.
<body>
<div id="sign">
<h3>zyk的爱好</h3>
<ul><li v-for="item in zyk">{{ item }}</li></ul>
<h3>其它人的爱好</h3>
<ul><li v-for="famous in famouss">{{ famous.name }}的爱好是{{ famous.hobby }}</li></ul>
</div>
<script>
let sign = new Vue({
el: '#sign',
data: {
zyk: ["抽烟", "喝酒", "烫头"],
famouss: [
{name: "赵丽颖", hobby: "演戏"},
{name: "展展与罗罗", hobby: "沙漠骆驼"},
{name: "IG", hobby: "拿冠军"},
],
},
});
</script>
网页中的显示效果如下图:
v-if
渲染数据的时候,同样也可以使用条件判断.
v-if的作用是控制标签的显示,它通过判断来添加标签.
用法一:
# v-if连续判断
<body>
<div id="sign">
<div v-if="dep == '开发部'">各个大佬部门</div>
<div v-if="dep == '销售部'">花钱太多部门</div>
<div v-if="dep == '人事部'">招不到人部门</div>
<div v-if="dep == '行政部'">办不好事部门</div>
</div>
<script>
let sign = new Vue ({
el: '#sign',
data: {
dep: "开发部",
},
});
用法二:
# v-if v-else-if v-else
<div id="sign">
<div v-if="dep == '开发部'">各个大佬部门</div>
<div v-else-if="dep == '销售部'">花钱太多部门</div>
<div v-else="dep == '人事部'">招不到人部门</div>
</div>
<script>
let sign = new Vue ({
el: '#sign',
data: {
dep: "开发部",
},
});
</script>
注意查看HTML标签元素,v-if底层使用appendChild方法实现.
v-show
与v-if类似,也是控制标签显示的.
<body>
<!--!isShow:取反(!)-->
<!--<div id="sign" v-show="!isShow">Hello Vue!</div>-->
<div id="sign" v-show="isShow">Hello Vue!</div>
<script>
let sign = new Vue({
el: '#sign',
data: {
// isShow: 1, 通过布尔值来判断, 为true时显示标签
isShow: true,
},
});
</script>
</body>
与v-if不同的是,v-show通过样式的display控制标签的显示.
v-if与v-show的性能比较
·
实现方式:
v-if底层采用的是appendChild来实现的;
v-show通过样式的display: none;控制标签的显示;
正因为实现方式上的差异,导致了它们的加载速度方面产生了差异:
·
加载性能:v-if加载速度快,v-show加载速度慢.
切换开销:v-if切换开销大,v-show切换开销小.
·
v-if是惰性的,它是"真正"的条件渲染,因为它能确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建;
v-show也是惰性的,如果在初始渲染时条件为假,则什么也不做,直到条件第一次变为真时,才会开始渲染条件块;
·
v-show简单的多,不管初始条件是什么,元素总是会被渲染,并且只是简单地基于CSS进行切换.
·
一般来说,v-if有更高的切换开销,而v-show有更高的初始渲染开销。因此,得出结论:
·
需要频繁地切换时,使用v-show较好;
运行过程中条件很少改变时,使用v-if较好;
v-bind
绑定属性
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<title>test</title>
<style>
.active {
background-color: gray;
}
</style>
</head>
<body>
<!--注意冒号后面跟标签的属性,属性后面的等号指向数据,可以简写为 :class, :href-->
<a id="sign" v-bind:href="link" :class="{active: isActive}">CSDN</a>
<script>
let sign = new Vue({
el: '#sign',
data: {
link: 'https://blog.csdn.net/qq_41964425',
isActive: true,
},
});
</script>
</body>
</html>
v-on
使用v-on可以在标签上面绑定事件,注意我们新建的vue实例sign中多了一个属性:methods,在methods中,是我们具体事件的实现方式.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<title>test</title>
<style>
.active01 {
color: red;
}
.active02 {
font-size: 200%;
}
</style>
</head>
<body>
<div id="sign">
<button v-on:click="colorRed">点我变颜色</button>
<!-- v-on:可简写为@符 -->
<button @click="colorGreen">点我变大小</button>
<!-- 还可以向下面这样用(mouseenter与mouseleave是鼠标的事件)-->
<!-- :class是v-bind:class的简写 -->
<p :class="{active01: isActive01, active02: isActive02}"
v-on="{mouseenter: colorRed, mouseleave: colorGreen}">我变</p>
</div>
<script>
let sign = new Vue({
el: '#sign',
data: {
isActive01: false,
isActive02: false,
},
// methods中是我们具体事件的实现方式
methods: {
colorRed: function () {
this.isActive01 = !this.isActive01; // ! 取反
},
colorGreen: function () {
this.isActive02 = !this.isActive02;
}
},
});
</script>
</body>
</html>
v-model
双向数据绑定
上面的示例是通过vue实例将数据渲染进模版,我们修改数据后,被修改的数据能及时(官方称之为响应式)的渲染到模版层.
那么,如果有这样一个需求,比如一个input标签,当用户修改渲染的原始数据后,打印出修改后的数据.
简单说,我们需要vue实例帮我渲染数据并响应式的监听数据修改,同时我们还需要监听用户行为,如果用户在标签上面修改了数据(之前的修改,指的是通过vue实例sign进行的数据修改),我们需要获取到新数据,针对这个需求,我们可以使用v-model指定.
<body>
<div id="sign">
<p>
你的姓名:
<input type="text" v-model="name"/>
</p>
<p>
选择你的性别:
<label>男<input type="checkbox" value="男" v-model="genders"></label>
<label>女<input type="checkbox" value="女" v-model="genders"></label>
</p>
<p>
选择你的女朋友:
<select v-model="girlFriends">
<!--注意:value不要留空-->
<!--如果指定了value,则{{ girlFriends }}会显示value的值-->
<option value="01">赵丽颖01</option>
<option>赵丽颖02</option>
<option>赵丽颖03</option>
</select>
</p>
<p><textarea v-model="article"></textarea></p>
<hr>
你的姓名是:{{ name }}
<hr>
你的性别是:{{ genders }}
<hr>
你选择的女朋友是:{{ girlFriends }}
<hr>
你的简介是:{{ article }}
</div>
<script>
let sign = new Vue({
el: '#sign',
data: {
name: 'zyk',
genders: [],
girlFriends: [],
article: "此处省略800字",
},
});
</script>
</body>
指令修饰符
<body>
<div id="sign">
<table border="1">
<thead>
<tr>
<th>学科</th>
<th>成绩</th>
</tr>
</thead>
<tbody>
<tr>
<td>语文</td>
<!--v-model.number:将其值转化为int类型-->
<td><input type="text" v-model.number.lazy="语文"></td>
</tr>
<tr>
<td>英语</td>
<td><input type="text" v-model.number.lazy="英语"></td>
</tr>
<tr>
<td>数学</td>
<td><input type="text" v-model.number.trim="数学"></td>
</tr>
</tbody>
</table>
</div>
<script>
let sign = new Vue({
el: '#sign',
data: {
"语文": 77,
"英语": 88,
"数学": 99,
},
});
</script>
</body>
网页中的显示效果如下图:
计算与侦听属性
计算属性: computed
侦听属性: watch
<body>
<div id="sign">
<table border="1">
<thead>
<tr>
<th>学科</th>
<th>成绩</th>
</tr>
</thead>
<tbody>
<tr>
<td>语文</td>
<!--v-model.number:将其值转化为int类型-->
<td><input type="text" v-model.number="语文"></td>
</tr>
<tr>
<td>英语</td>
<td><input type="text" v-model.number="英语"></td>
</tr>
<tr>
<td>数学</td>
<td><input type="text" v-model.number="数学"></td>
</tr>
<tr>
<td>总分</td>
<!--<td>{{ 语文 + 英语 + 数学 }}</td>-->
<td>{{ sumScore }}</td>
</tr>
<tr>
<td>平均分</td>
<td>{{ avgScore }}</td>
</tr>
</tbody>
</table>
<hr>
{{ 数学 }}
</div>
<script>
let sign = new Vue({
el: '#sign',
data: {
"语文": 77,
"英语": 88,
"数学": 99,
},
// 计算属性放在缓存当中,只有数据修改时才重新计算,网页刷新时才执行
computed: {
sumScore: function () {
return this.语文 + this.英语 + this.数学;
},
avgScore: function () {
return this.sumScore / 3;
},
},
// 侦听属性
watch: {
数学: function () {
// 这里我实测未打印结果, 不明原因
console.log(this.数学);
},
},
});
</script>
</body>
自定义属性
<body>
<div id="sign" v-pos="position">Hello Vue!</div>
<script>
// 下面的pos <=> 上面调用时的v-post
Vue.directive('pos', function (el, bindding) {
console.log("大家好!我是自定义属性");
console.log("el的值为:", el);
console.log("bindding的值为:", bindding);
});
let sign = new Vue({
el: '#sign',
data: {
position: true,
},
})
</script>
</body>
获取DOM元素
<body>
<div id="sign">
<h1 ref="myRef">我是颜色</h1>
<button @click="greenColor">点我让颜色变绿</button>
<!-- @click 等同于 v-on:click -->
</div>
<script>
let sign = new Vue({
el: '#sign',
data: {
isActive: 'active',
},
// 获取DOM属性
methods: {
greenColor: function () {
this.$refs.myRef.className = this.isActive;
},
},
});
</script>
</body>
"
【Vue常用指令】的更多相关文章
- vue学习(二)Vue常用指令
2 Vue常用指令 1. vue的使用要从创建Vue对象开始 var vm = new Vue(); 2. 创建vue对象的时候,需要传递参数,是json对象,json对象对象必须至少有两个属性成员 ...
- 重学VUE——vue 常用指令有哪些?
一.什么是指令? 在 vue 中,指令以 v- 开头,是一种特殊的自定义行间属性.指令属性的预期值是一个表达式,指令的职责就是:表达式的值改变时,相应地将某些行为应用到DOM上.只有v-for是一个类 ...
- Vue.js 第1章 Vue常用指令学习
今日目标 能够写出第一个vue应用程序 能够接受为什么需要学vue 能够使用指令 能够通过指定完成简单的业务(增加删除查询) 能够理解mvvm 为什么要学习vue 企业需要 可以提高开发效率 实现vu ...
- vue常用指令
1.v-if系列 v-if="数据|判断" 只要条件成立,就显示if中的元素 v-else (注意:必须跟在v-if或者v-if-else的后面,不然失效) 如果if条件不成立显示 ...
- VUE常用指令总结!
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue常用指令总结
一.vue指令 官网解释 指令 (Directives) 是带有 v- 前缀的特殊特性.指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况).指令的职责是,当表达式的值改变 ...
- Vue常用指令详解分析
Vue入门 Vue是一个MVVM(Model / View / ViewModel)的前端框架,相对于Angular来说简单.易学上手快,近两年也也别流行,发展速度较快,已经超越Angular了.比较 ...
- Vue.js之常用指令
vue常用指令 vue.js官方给自己的定义是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍vue.js的常用指令. 官网:点我 一.v-text.v-html v-text:用于绑定文本 v ...
- Vue常用语法及命令
1,Vue常用语法 vue常用语法之变量的定义 // 1,变量相关 // 变量的提升 var username = "雪雪"; var username ; console.log ...
随机推荐
- xss和sql注入学习1
在本地搭建一个存在漏洞的网站,验证xss漏洞和SQL注入的利用方法. 使用phpStudy工具搭建一个美食CMS网站平台. 0x01 xss测试 打开调试模式,定位姓名栏输入框: 尝试在value中 ...
- python特性
# for用法 for i in range(0,100,2): print(i) n = 0 # while用法 while n < 100: print(n) n += 2 else: pr ...
- 浅谈C#委托的用法-delegate
2018年11月7日 小雨 一.委托的概念 委托和类一样是一种用户自定义类型,它存储的就是一系列具有相同签名和返回类型的方法的地址,调用委托的时候,它所包含的所有方法都会被执行. 借用百度上的 ...
- maven打包忽略test文件夹
当在项目中的test中写了单元测试后,在mvn install打包时会自动进行所有单元测试,所以这时需要忽略test文件夹 有两种方法: 1.用命令的方式:mvn install -Dmaven.te ...
- Mac 上完美解决SVN问题及svn软件
注:本文是转自https://blog.csdn.net/qq_40144558/article/details/80630466 svn对Mac的支持不算美好,几乎所有软件都很繁琐,我们作为开发其实 ...
- ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline[上篇]
链接:https://www.cnblogs.com/artech/archive/2007/09/13/891262.html 相信大家都使用过ASP.NET进行过基于Web的应用开发,ASP.NE ...
- K3修改字段名
在K3的BOS中,自定义字段之后我们往往会修改字段名,便于记忆和理解,但是修改字段名之后,只是数据库中的字段名被修改了,BOS中的字段标识并没有被修改,可以通过以下语句将标识和字段名改成一致. sel ...
- 在多租户(容器)数据库中如何创建PDB:方法3 克隆远程PDB
基于版本:19c (12.2.0.3) AskScuti 创建方法:克隆远程PDB(从非当前CDB中进行远程克隆).将 CDB2 中的 ERP1 远程克隆为 CDB1 中的 PDB6 对应路径:Cre ...
- 一次列表页伪静态的实现;结合nginx rewrite
nginx伪静态: rewrite ^/(.*)-htm-(.*)$ /$1.php?$2; 将 list-html-t-3-p-4.html 转到list.php?t-3-p-4 t-3-p-4 用 ...
- vscode中vim插件对ctrl键的设置
vim配置 在使用中经常想使用ctrl-c,虽然在vscode中有配置选项可以让vim与ctrl键解绑,但是这样就使用不了vim的VISUAL BLOCK.所以进行了自定义设置. 设置 - Vim C ...