Vue(三)指令
v-text:更新元素的text内容
<template>
<div class="about">
<p v-text="msg"></p>
<!--和下面效果一样-->
<p>{{msg}}</p>
</div>
</template>
<script>
export default {
components: {MyList},
data: ()=> ({
msg: '更新元素的 textContent。如果要更新部分的 textContent ,需要使用 {{ Mustache }} 插值。'
})
}
</script>
页面:

v-html:更新元素的innerHTML,这里面的内容不会作为Vue模板编译
<template>
<div class="about">
<!--v-html 内容不会被处理-->
<p v-html="msg"></p>
<!--v-text 内容会被作为vue模板编译-->
<p v-text="msg"></p>
</div>
</template>
<script>
export default {
data: ()=> ({
msg: '<h1>在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击。</h1>' +
'<h1>只在可信内容上使用 v-html,永不用在用户提交的内容上。</h1>'
})
}
</script>
页面:

v-show:根据表达式之真假值,切换元素的 display CSS 属性
<template>
<div class="about">
<p v-show="flag" v-text="msg"></p>
</div>
</template>
<script>
export default {
data: ()=> ({
flag: true,
msg: '根据表达式之真假值,切换元素的 display CSS 属性'
})
}
</script>
页面:

v-if:根据表达式的值的真假条件渲染元素。在切换时元素及它的数据绑定 / 组件被销毁并重建。
<template>
<div class="about">
<p v-if="flag" v-text="msg"></p>
</div>
</template>
<script>
export default {
data: ()=> ({
flag: true,
msg: '根据表达式的值的真假条件渲染元素。在切换时元素及它的数据绑定 / 组件被销毁并重建。'
})
}
</script>
页面:

如果flag=false,那么元素不会被渲染

v-else:前一兄弟元素必须有 v-if 或 v-else-if
<template>
<div class="about">
<p v-if="flag" v-text="msg"></p>
<p v-else>我是穷逼</p>
</div>
</template>
<script>
export default {
data: ()=> ({
flag: false,
msg: '我很有钱'
})
}
</script>
页面:

v-else-if:前一兄弟元素必须有 v-if 或 v-else-if
<template>
<div class="about">
<p v-if="flag == 1">{{msg}}</p>
<p v-else-if="flag == 2">我假装我很有钱</p>
<p v-else>我是穷逼</p>
</div>
</template>
<script>
export default {
data: ()=> ({
flag: 2,
msg: '我很有钱'
})
}
</script>
页面:

v-for
<template>
<div class="about">
<div v-for="(item,index) in items">
{{index}} -- {{ item }}
</div>
</div>
</template>
<script>
export default {
data: ()=> ({
items: ['鱼香肉丝','宫保鸡丁','炖排骨']
})
}
</script>
页面:

v-on:事件处理
缩写:@
修饰符:
.stop - 阻止事件冒泡
.prevent - 阻止默认事件
.capture
.self
.once - 只触发一次回调。
.passive
.native - 监听组件根元素的原生事件。 按键修饰符
.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right 系统修饰键
.ctrl
.alt
.shift
.meta - 在 Mac 系统键盘上,meta 对应 command 键 (⌘)。在 Windows 系统键盘 meta 对应 Windows 徽标键 (⊞) 鼠标按钮修饰符
.left
.right
.middle
代码
<template>
<div class="about" @click="parentClick">
<button @click="aClick">普通点击事件</button>
<br><br>
<button @click.stop="bClick">阻止冒泡事件</button>
<br><br>
<a href="https://www.qq.com/" @click.stop.prevent="cClick">阻止默认事件</a>
<br><br>
<button @click.once="dClick">执行一次事件</button>
<br><br>
<input @keyup.enter="eClick" placeholder="有本事按Enter"/>
<br><br>
<input @click.stop.ctrl="fClick" placeholder="有本事按Ctrl+Click"/>
<br><br>
<input @keydown.ctrl.alt="gClick" placeholder="有本事按Ctrl+Alt"/>
<br><br>
<button @click.stop.left="hClick">鼠标左键事件</button>
</div>
</template>
<script>
export default {
methods: {
parentClick: function () {
alert('父元素点击事件')
},
aClick: function () {
alert('普通点击事件')
},
bClick: function () {
alert('点击之后,不再继续冒泡到父元素')
},
cClick: function () {
alert('点击之后,不再触发默认跳转事件')
},
dClick: function () {
alert('只能点击一次,你再也不能看见我')
},
eClick: function () {
alert('监听回车事件')
},
fClick: function () {
alert('监听Ctrl+Click事件')
},
gClick: function () {
alert('监听Ctrl+Alt事件')
},
hClick: function () {
alert('监听鼠标左键事件')
},
}
}
</script>
页面:

v-bind:动态绑定
缩写: :
<template>
<div class="about">
<!--绑定src属性-->
<img :src="imgSrc"/>
<!--绑定class:数组方式-->
<div :class="[myClass]"></div>
<!--绑定class:class 存在与否将取决于数据属性 active-->
<div :class="[myClass,{'area-active': active}]"></div>
<div style="text-align: center">
<!--:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用单引号括起来) 来命名-->
<span :style="{display: 'inline-block',width: width1 + 'px',height: width1 + 'px',backgroundColor: color1}"></span>
<span :style="{display: 'inline-block',width: width2 + 'px',height: width2 + 'px',backgroundColor: color2}"></span>
<!--:style 的数组语法-->
<span :style="[styleObject]"></span>
</div>
</div>
</template>
<script>
export default {
data: ()=> ({
styleObject: {
display: 'inline-block',
width: '150px',
height: '150px',
'background-color': '#2990c4'
},
width1: 50,
color1: '#12BC99',
width2: 100,
color2: '#9455bc',
active: true,
myClass: 'area',
imgSrc: 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=935292084,2640874667&fm=27&gp=0.jpg'
})
}
</script>
<style scoped>
.area{
margin: 8px auto;
width: 50px;
height: 50px;
background-color: darkcyan;
}
.area-active{
background-color: crimson;
}
</style>
页面:

v-model:表单绑定
限制:
<input>
<select>
<textarea>
components
修饰符:
.lazy - 取代 input 监听 change 事件
.number - 输入字符串转为有效的数字
.trim - 输入首尾空格过滤
<template>
<div class="about">
<div>Message is: {{msg}}</div>
<br/>
<input v-model="msg"/>
<br/><br/>
<!--textarea绑定-->
<textarea v-model="msg" cols="80" rows="5"></textarea>
<br/><br/>
<!--复选-->
<input type="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
<br/><br/>
<!--复选数组-->
<div>
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
</div>
<br/><br/>
<!--单选数组-->
<div>
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>Picked: {{ picked }}</span>
</div>
<br/><br/>
<!--select的绑定-->
<div>
<select v-model="selected">
<option v-for="option in options" v-bind:value="option.value">
{{ option.text }}
</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
<br/><br/>
<!--自动将用户的输入值转为数值类型-->
<input type="number" v-model.number="age"/>
<span>{{typeof age}}</span>
<br/><br/>
<!--自动过滤用户输入的首尾空白字符-->
<input v-model.trim="msgs">
<p>{{msgs}}</p> <!--取消实时同步-->
<input v-model.lazy="lmsgs">
<p>{{lmsgs}}</p>
<br/><br/>
</div>
</template>
<script>
export default {
data: ()=> ({
age: 10,
selected: '',
options: [
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' }
],
picked: [],
checkedNames: [],
checked: false,
msg: '你可以用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。',
msgs: '',
lmsgs: '',
})
}
</script>
页面:

v-pre:跳过这个元素和它的子元素的编译过程。
<template>
<div class="about">
<div v-pre>{{这里面的内容不会被编译}}</div>
</div>
</template>
<script>
export default {
data: ()=> ({ })
}
</script>
页面:

v-once:只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。
<template>
<div class="about">
<div v-once>{{msg}}</div>
<input v-model="msg"/>
</div>
</template>
<script>
export default {
data: ()=> ({
msg: '这里只编译一次'
})
}
</script>
页面

之后再改变数据模型,v-once部分不会再改变
Vue(三)指令的更多相关文章
- vue自定义指令,比onerror更优雅的方式实现当图片加载失败时使用默认图,提供三种方法
首先,来看下效果图(演示一下图片正常加载与加载失败时的效果) 在线体验地址:https://hxkj.vip/demo/vueImgOnerror/ 一.常规方法解决 我们都知道,img标签支持one ...
- vue的指令
我之前学了学angular 发现angular和vue的指令有点类似 先说一下 new Vue({ el: "#box", // element(元素) 当前作 ...
- vue之指令
一.什么是VUE? 它是构建用户界面的JavaScript框架(让它自动生成js,css,html等) 二.怎么使用VUE? 1.引入vue.js 2.展示HTML <div id=" ...
- vue之指令篇 ps简单的对比angular
这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precom ...
- 第3章-Vue.js 指令扩展 和 todoList练习
一.学习目标 了解Vue.js指令的实现原理 理解v-model指令的高级用法 能够使用Vue.js 指令完成 todoList 练习(重点+难点) 二.todoList练习效果展示 2.1.效果图展 ...
- 第2章-Vue.js指令
一.学习目标 了解 什么 是 Vue.js 指令 理解 Vue.js 指令的 用途 掌握 Vue.js 指令的书写规范 能够 使用 Vue.js 指令完成部门页面交互效果(难点和重点) 二.指令的基本 ...
- Vue的指令以及组件化开发
一. 自定义指令 如何: 1. 创建指令 Vue.directive("指令名",{ inserted(elem){//指令所在的元素被加载到DOM树上后自动执行指令 //elem ...
- 使用Vue自定义指令实现Select组件
完成的效果图如下: 一.首先,我们简单布局一下: <template> <div class="select"> <div class="i ...
- Vue的指令和成员
目录 Vue的指令和成员 指令 表单 斗篷 条件 循环 成员 计算成员 监听成员 Vue的指令和成员 指令 表单 表单指令一般是和属性指令联合使用的,最常见的就是v-model="变量&qu ...
- Vue自定义指令 数据传递
在项目开发过程中,难免会遇到各种功能需要使用Vue自定义指令--directive 去实现 .关于directive的使用方式这里就不做过多的介绍了,Vue官方文档中说的还是听明白的.今天讲讲在使用V ...
随机推荐
- 5分钟入门LingaScript-尝鲜中文版TypeScript
续前文转载: 中文輸進去,程式出得來,開發者發大財 -LingaScript:中文化TypeScript, 虽然其中例程使用了繁体中文语法, 但它同时也支持简体中文语法. 注: 此文中VS Code的 ...
- 生鲜配送管理系统_升鲜宝V2.0 供应商协同系统设计思想及设计效果展现(一)
生鲜配送管理系统[升鲜宝]V2.0 供应商协同系统小程序设计思想及操作说明(一) 生鲜供应链企业,最重要的二个方面,其中一个是客户服务(销售订单) 另外一个就是供应商的管控,只有做好了这 ...
- Android Studio教程06-布局,监听器以及基本控件
目录 2. 监听器 3. 布局 3.1. 布局分类 (1). Linear Layout (2). Relative Layout (3). ListView (4). Grid View 4. 其他 ...
- Python3 isdigit()方法
描述 Python isdigit() 方法检测字符串是否只由数字组成. 语法 isdigit()方法语法: str.isdigit() 参数 无. 返回值 如果字符串只包含数字则返回 True 否则 ...
- oracle异地备份
一.安装oracle客户端 右键以管理员身份运行 选择管理员 跳过软件更新 选择语言,默认中文 指定安装位置 检查当前环境 安装 二.使用exp命令备份 exp 用户名/密码@IP地址/数据库 own ...
- jquery-hide//一段hide代码实现异步隐藏
(本篇博客没有什么参考价值,只用于自己未来复习.) 说白了就是通过“父亲”实现异步 代码: <!DOCTYPE html> <html> <head> <sc ...
- Ruby入坑指南
1.1 简介 Ruby语言是由松本行弘(Matz)设计,是一门通用的.面向对象的.解释型语言. 1.2 Ruby?RUBY?ruby? 1.Ruby:用来表示编程的语言 2.ruby:是指一个计算机程 ...
- OSI模型网络七层协议
物理层 物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础.物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境. 1.1媒体和互连设备 物理层的媒体包括架空明线. ...
- 【故障公告】推荐系统中转站撑爆服务器 TCP 连接引发的故障
上周五下午,我们在博客中部署了推荐系统,在博文下方显示“最新IT新闻”的地方显示自动推荐的关联博文.我们用的推荐系统是第四范式的推荐服务,我们自己只是搭建了一个推荐系统中转站(基于 ASP.NET C ...
- 15 Django REST Framework 给api添加自定义搜索条件
一.ListModelMixin源码 # 源码 class ListModelMixin(object): """ List a queryset. "&quo ...