指令
带有v-前缀的特殊属性。
v-text和v-html指令
v-text渲染文本,html代码不会被解析。
和模板语法{{}}的区别:在vue没有创建时{{}}会被当成文本渲染到浏览器中。
v-html,如果message中有html代码,会被解析。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<p v-text="message"></p>
<p>{{message}}</p>
<p v-html="message"></p>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
let vm = new Vue({
el: '#app',
data: {
message: "<a href='http://www.baidu.com'>hello world</a>"
}
})
</script>
</body>
</html>
v-show指令
v-show只是去切换display属性,v-if会直接把标签除去。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<button v-on:click="fn">点击</button>
//flag为true时显示,为false时隐藏
<p v-show="flag">hello world</p>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
let vm = new Vue({
el: '#app',
data: {
flag: true
},
methods: {
fn(){
//点击时flag取反
this.flag = !this.flag;
}
}
})
</script>
</body>
</html>
v-if、v-else、v-else-if指令
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<button v-on:click="fn">点击生成一个分数:{{num}}</button>
<p v-if="num >= 90">优秀</p>
<p v-else-if="num >= 70">良好</p>
<p v-else-if="num >= 60">及格</p>
<p v-else>重修</p>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
let vm = new Vue({
el: '#app',
data: {
num: 0
},
methods:{
fn(){
this.num = Math.floor(Math.random() * 101);
}
}
})
</script>
</body>
</html>
v-for指令
v-for写到哪个元素上就循环哪个元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<button v-on:click="fn">点击</button>
<button v-on:click="add">增加</button>
<ul v-show="flag">
<li v-for="item in todos">{{item}}</li>
</ul>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
let vm = new Vue({
el: '#app',
data: {
todos: ['恰饭','睡觉','打麻将'],
flag: false
},
methods: {
fn(){
this.flag = !this.flag;
},
add(){
this.todos.push("学习");
}
}
})
</script>
</body>
</html>
注:
1 v-for可以打印数组下标
2 可以循环对象
3 可以控制循环次数
4 数组更新后,页面也跟着改变
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<button v-on:click="fn">点击操作</button>
<ul>
<!--打印下标-->
<li v-for="item,index in arr">{{item}}--{{index}}</li>
<!--循环对象-->
<li v-for="value,key in obj">{{key}}:{{value}}</li>
<!--控制循环次数-->
<li v-for="i in 10">{{i}}</li>
</ul>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
let vm = new Vue({
el: '#app',
data: {
arr: [3,7,2,10,1],
obj: {
id: 1,
name: 'hello',
age: 18
}
},
methods: {
fn(){
//增加数组元素,页面渲染也要跟着变化,要使用到变异方法
this.arr.push(886);
}
}
})
</script>
</body>
</html>
变异方法和非变异方法
变异方法:执行后原来的数组被改变。
非变异方法:执行后原数组不变。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<button v-on:click="fn">操作</button>
<ul>
<li v-for="item in arr">{{item}}</li>
</ul>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
let vm = new Vue({
el: '#app',
data: {
arr: [4,1,7,6,9]
},
methods: {
fn(){
//1 push在数组末尾添加元素
this.arr.push(123);
//2 pop删除数组最后一个元素,返回值就是被删掉的元素
this.arr.pop();
//3 shift删除数组的第一个元素
this.arr.shift();
//4 unshift从数组最前面开始添加元素
this.arr.unshift(123);
//5 splice第一个参数表示删除或添加的起始位置,第二个参数表示删除多少个,从第三个参数开始表示添加的元素
this.arr.splice(0,2,45,67); //[0,2)区间
//6 sort默认按字符编码排序(里面需要传入一个函数来写排序规则)
this.arr.sort((a,b) => {return a>b}); //升序排序
this.arr.sort((a,b) => {return a<b}); //降序排序
//reverse翻转数组
this.arr.reverse();
}
}
})
</script>
</body>
</html>
v-on、v-bind、v-model、v-once、v-pre、v-cloak指令
1 v-on绑定事件,简写形式@
2 v-bind绑定属性,简写形式:属性=’’
3 v-model表单上创建数据的双向绑定
4 v-once只渲染一次,这块内容就当成静态模板,不会再改变
5 v-pre跳过编译,显示语法
6 在vue实例未创建完成时,会出现闪烁问题,v-cloak可以配合css解决这个问题
当需要隐藏的内容较多时使用v-cloak,内容较少的时候使用v-text
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
[v-cloak]{
display: none;
}
</style>
</head>
<body>
<div id="app">
<!--1 v-on绑定事件,简写形式@-->
<button @click="fn">点击</button>
<!--2 v-bind绑定属性,简写形式:属性=''-->
<a :href="href">百度一下</a>
<!--3 v-model表单上创建数据的双向绑定-->
<!--input中的内容变化时,p标签中的内容跟着变化-->
<button @click="add">增加</button>
<input type="text" v-model="value">
<p>{{value}}</p>
<!--4 v-once只渲染一次,这块内容就当成静态模板,不会再改变-->
<button @click="change">点击</button>
<p v-once>{{href}}</pv>
<!--5 v-pre跳过编译,显示语法-->
<p v-pre="href">{{href}}</p>
<hr>
<!--6 在vue实例未创建完成时,会出现闪烁问题,v-cloak可以配合css解决这个问题-->
<p v-cloak>{{href}}</p>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
setTimeout(function(){
let vm = new Vue({
el: '#app',
data: {
href: 'http://www.baidu.com',
value: 123
},
methods: {
fn(){
alert("嘿嘿");
},
add(){
this.value ++;
},
change(){
this.href = 'http://www.taobao.com';
}
}
});
},50)
</script>
</body>
</html>