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(三)指令的更多相关文章

  1. vue自定义指令,比onerror更优雅的方式实现当图片加载失败时使用默认图,提供三种方法

    首先,来看下效果图(演示一下图片正常加载与加载失败时的效果) 在线体验地址:https://hxkj.vip/demo/vueImgOnerror/ 一.常规方法解决 我们都知道,img标签支持one ...

  2. vue的指令

    我之前学了学angular 发现angular和vue的指令有点类似 先说一下 new  Vue({          el: "#box", // element(元素) 当前作 ...

  3. vue之指令

    一.什么是VUE? 它是构建用户界面的JavaScript框架(让它自动生成js,css,html等) 二.怎么使用VUE? 1.引入vue.js 2.展示HTML <div id=" ...

  4. vue之指令篇 ps简单的对比angular

    这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precom ...

  5. 第3章-Vue.js 指令扩展 和 todoList练习

    一.学习目标 了解Vue.js指令的实现原理 理解v-model指令的高级用法 能够使用Vue.js 指令完成 todoList 练习(重点+难点) 二.todoList练习效果展示 2.1.效果图展 ...

  6. 第2章-Vue.js指令

    一.学习目标 了解 什么 是 Vue.js 指令 理解 Vue.js 指令的 用途 掌握 Vue.js 指令的书写规范 能够 使用 Vue.js 指令完成部门页面交互效果(难点和重点) 二.指令的基本 ...

  7. Vue的指令以及组件化开发

    一. 自定义指令 如何: 1. 创建指令 Vue.directive("指令名",{ inserted(elem){//指令所在的元素被加载到DOM树上后自动执行指令 //elem ...

  8. 使用Vue自定义指令实现Select组件

    完成的效果图如下: 一.首先,我们简单布局一下: <template> <div class="select"> <div class="i ...

  9. Vue的指令和成员

    目录 Vue的指令和成员 指令 表单 斗篷 条件 循环 成员 计算成员 监听成员 Vue的指令和成员 指令 表单 表单指令一般是和属性指令联合使用的,最常见的就是v-model="变量&qu ...

  10. Vue自定义指令 数据传递

    在项目开发过程中,难免会遇到各种功能需要使用Vue自定义指令--directive 去实现 .关于directive的使用方式这里就不做过多的介绍了,Vue官方文档中说的还是听明白的.今天讲讲在使用V ...

随机推荐

  1. 5分钟入门LingaScript-尝鲜中文版TypeScript

    续前文转载: 中文輸進去,程式出得來,開發者發大財 -LingaScript:中文化TypeScript, 虽然其中例程使用了繁体中文语法, 但它同时也支持简体中文语法. 注: 此文中VS Code的 ...

  2. 生鲜配送管理系统_升鲜宝V2.0 供应商协同系统设计思想及设计效果展现(一)

    生鲜配送管理系统[升鲜宝]V2.0 供应商协同系统小程序设计思想及操作说明(一)     生鲜供应链企业,最重要的二个方面,其中一个是客户服务(销售订单)    另外一个就是供应商的管控,只有做好了这 ...

  3. Android Studio教程06-布局,监听器以及基本控件

    目录 2. 监听器 3. 布局 3.1. 布局分类 (1). Linear Layout (2). Relative Layout (3). ListView (4). Grid View 4. 其他 ...

  4. Python3 isdigit()方法

    描述 Python isdigit() 方法检测字符串是否只由数字组成. 语法 isdigit()方法语法: str.isdigit() 参数 无. 返回值 如果字符串只包含数字则返回 True 否则 ...

  5. oracle异地备份

    一.安装oracle客户端 右键以管理员身份运行 选择管理员 跳过软件更新 选择语言,默认中文 指定安装位置 检查当前环境 安装 二.使用exp命令备份 exp 用户名/密码@IP地址/数据库 own ...

  6. jquery-hide//一段hide代码实现异步隐藏

    (本篇博客没有什么参考价值,只用于自己未来复习.) 说白了就是通过“父亲”实现异步 代码: <!DOCTYPE html> <html> <head> <sc ...

  7. Ruby入坑指南

    1.1 简介 Ruby语言是由松本行弘(Matz)设计,是一门通用的.面向对象的.解释型语言. 1.2 Ruby?RUBY?ruby? 1.Ruby:用来表示编程的语言 2.ruby:是指一个计算机程 ...

  8. OSI模型网络七层协议

    物理层 物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础.物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境. 1.1媒体和互连设备 物理层的媒体包括架空明线. ...

  9. 【故障公告】推荐系统中转站撑爆服务器 TCP 连接引发的故障

    上周五下午,我们在博客中部署了推荐系统,在博文下方显示“最新IT新闻”的地方显示自动推荐的关联博文.我们用的推荐系统是第四范式的推荐服务,我们自己只是搭建了一个推荐系统中转站(基于 ASP.NET C ...

  10. 15 Django REST Framework 给api添加自定义搜索条件

    一.ListModelMixin源码 # 源码 class ListModelMixin(object): """ List a queryset. "&quo ...