内容渲染指令
v-text
类似原生js的
innerText
- 改变了元素的内容但是读取不了html语法
- 不能渲染成标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./js/vue.js"></script>
<script>
window.addEventListener('load', function(e) {
var vm = new Vue({
el: '#app',
data: {
message: '我是动态赋值的信息',
message1: '<a href="#">111</a>'
}
})
})
</script>
</head>
<body>
<div id="app">
<p v-text="message">xxx</p>
<p v-text=message1>xxx</p>
</div>
</body>
</html>
插值表达式:
vue提供的模板语法,解决
v-text
覆盖原有的文本内容的问题
- 不可以读取html语法,渲染不成标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./js/vue.js"></script>
<script>
window.addEventListener('load', function(e) {
var vm = new Vue({
el: '#app',
data: {
message: '我是动态赋值的信息',
message1: '<a href="#">111</a>'
}
})
})
</script>
</head>
<body>
<div id="app">
<p>xxx----{{ message }}</p>
<p>xxx----{{ message1 }}</p>
</div>
</body>
</html>
v-html
类似原生js的
innerHTML
- 改变了元素的内容
- 可以读取html渲染成标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./js/vue.js"></script>
<script>
window.addEventListener('load', function(e) {
var vm = new Vue({
el: '#app',
data: {
message: '我是动态赋值的信息',
message1: '<a href="#">111</a>'
}
})
})
</script>
</head>
<body>
<div id="app">
<p v-text="message">xxx</p>
<p v-html=message1>xxx</p>
</div>
</body>
</html>
属性绑定指令
基本用法:
- 动态修改标签的属性值:
v-bind:属性名="属性值"
- 简写:
:属性名="属性值"
- 自定义属性也可以添加
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 导入Vue包 -->
<script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-bind:placeholder="message" :l-index="index">
</div>
</body>
<script>
window.addEventListener('load', function(e) {
var vm = new Vue({
el: '#app',
data: {
'index': 2,
'message': '动态修改placeholder'
}
})
})
</script>
</html>
绑定class属性:
- 普通用法:
:class="属性值"
- 对象用法:
:class="{ active: flag }"
当flag为true时class的属性值为active,当为false时没有。 - 数组用法:
:class="[class1,class2]"
两个类名都会渲染到标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 导入Vue包 -->
<script src="./js/vue.js"></script>
<style>
.active {
width: 100px;
height: 100px;
background-color: blueviolet;
}
.class1 {
width: 50px;
height: 50px;
border: 5px solid black;
}
.class2 {
background-color: brown;
}
</style>
</head>
<body>
<div id="app">
<div :class="{ active:flag }"></div>
<div :class="[c1Name ,c2Name]"></div>
</div>
</body>
<script>
window.addEventListener('load', function(e) {
var vm = new Vue({
el: '#app',
data: {
flag: true,
c1Name: 'class1',
c2Name: 'class2'
}
})
})
</script>
</html>
绑定style属性:
也可以使用数组用法
.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 导入Vue包 -->
<script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
<!-- :style="data中的key" -->
<div :style="active"></div>
</div>
</body>
<script>
window.addEventListener('load', function(e) {
var vm = new Vue({
el: '#app',
data: {
// 定义一个对象 css数据 backgroundColor为大驼峰形式
active: {
width: '100px',
height: '100px',
backgroundColor: 'red',
}
}
})
})
</script>
</html>
事件绑定指令
绑定事件语法:
v-on:click="methods中的函数"
简写:
@click="methods中的函数"
-
可以传参数
-
如果不传参数
默认接收事件对象event
-
如果传参数了之后还要使用事件对象event
@click="函数名(参数1,$event)" // 参数2为事件对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 导入Vue包 -->
<script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
<button @click="btnClick('zhangsan',$event)">按钮</button>
</div>
</body>
<script>
window.addEventListener('load', function(e) {
var vm = new Vue({
el: '#app',
data: {},
methods: {
btnClick(name, e) {
console.log(name);
console.log(e);
}
}
})
})
</script>
</html>
事件修饰符
修饰符 | 作用 |
---|---|
.stop | 阻止单击事件继续传播 |
.prevent | 提交事件不再重载页面 |
.capture | 添加事件监听器时使用事件捕获模式 (内部元素触发的事件先在此处理,然后才交由内部元素进行处理) |
.self | 只当在 event.target 是当前元素自身时触发处理函数 |
.once | 事件将只会触发一次 |
双向绑定指令
- 不操作DOM的前提下快速获取表单的数据
- 用户输入DOM中的数据,Vue的data中的数据也会随之改变
- 修改data中的数据 ,DOM中的数据也会被修改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 导入Vue包 -->
<script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="textValue">
<button @click="btn1">按钮1</button>
<button @click="btn2">按钮2</button>
</div>
</body>
<script>
window.addEventListener('load', function(e) {
var vm = new Vue({
el: '#app',
data: {
textValue: '',
},
methods: {
btn1() {
console.log(this.textValue);
},
btn2() {
this.textValue = '哈哈哈'
}
}
})
})
</script>
</html>
双向数据绑定修饰符
修饰符 | 作用 | 示例 |
---|---|---|
.number | 自动将用户输入的值转换为数值类型 | <input v-model.number="age"> |
.trim | 自动顾虑用户输入的首位空白字符 | <input v-model.trim="msg"> |
.lazy | 在change 时而非input 时更新 | <input v-model.lazy="msg"> |