v-on指令
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<p>{{msg}}</p>
<button v-on:click="showInfo">请单击</button>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
msg: '单击查看此内容'
},
methods: {
showInfo () {
this.msg = '123'
}
}
})
</script>
</body>
</html>
v-for指令
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<div v-for="(item,key) in list" data-id="key">
索引是:{{key}},元素内容:{{item}}
</div>
</div>
<script>
var vm=new Vue({
el:'#app',
data: {
list: [1,2,4]
}
})
</script>
</body>
</html>
v-if指令
v-if重新创建v-show是显示隐藏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<div v-if="isShow" style="background-color:#ccc;">我是v-if</div>
<button @click="isShow=!isShow">显示/隐藏</button>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
isShow:'true'
}
})
</script>
</body>
</html>
学生列表案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<button @click="add">添加学生</button>
<button @click="del">删除学生</button>
<table border="1" width="50%" style="border-collapse: collapse">
<tr>
<th>班级</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
</tr>
<tr align="center" v-for="item in students">
<td>{{item.grade}}</td>
<td>{{item.name}}</td>
<td>{{item.gender}}</td>
<td>{{item.age}}</td>
</tr>
</table>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
students: []
},
methods: {
//添加学生信息
add () {
var student = { grade: '1', name: 'cc', gender: 'nan', age: 22 };
this.students.push(student)
},
//删除学生信息
del () {
this.students.pop()
}
}
})
</script>
</body>
</html>
v-on允许触发事件时执行JavaScript代码
随机数案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<button v-on:click="count+=Math.random()" >随机数</button>
<p>随机数是{{count}}</p>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
count:0
},
methods:{
submit(){
count=1
}
}
})
</script>
</body>
</html>
keyup.enter按键修饰符监听按键
回车按键
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-bind:value="skt" v-on:keyup.enter="submit">
<hr/>
<p>{{skt}}</p>
</div>
<script>
var vm =new Vue({
el:'#app',
data:{
skt:'123'
},
methods:{
submit(){
this.skt='cuowu'
}
}
})
</script>
</body>
</html>
事件修饰符
.stop阻止事件冒泡
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<div v-on:click="doParent">
<button v-on:click="doThis">时间冒泡</button>
<button v-on:click.stop="doThis">阻止时间冒泡</button>
</div>
</div>
<script>
var vm=new Vue({
el:'#app',
methods:{
doParent(){
console.log('父类单击事件')
},
doThis(){
console.log('子类单击事件')
}
}
})
</script>
</body>
</html>
.prevent阻止默认行为
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<a href="https://www.baidu.com" v-on:click.prevent>阻止默认行为</a>
<a href="https://www.baidu.com" >不阻止默认行为</a>
</div>
<script>
var vm=new Vue({
el:'#app'
})
</script>
</body>
</html>
.capture事件捕获
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<div v-on:click.capture="doParent">
<button v-on:click="doThis">事件捕获</button>
</div>
</div>
<script>
var vm=new Vue({
el:'#app',
methods:{
doParent(){
console.log('fu')
},
doThis(){
console.log('zi')
}
}
})
</script>
</body>
</html>
.self自身触发和.once触发一次
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<div class="Odiv1" v-on:click.self="doParent">a
<div class="Odiv2" v-on:click="doThis">b</div>
</div>
<!-- 只执行一次 -->
<div class="Odiv1" v-on:click.once="doParent">c
<!-- 被单击执行 -->
<div class="Odiv2" v-on:click.self.stop="doThis">d</div>
</div>
</div>
<script>
var vm=new Vue({
el:'#app',
methods:{
doParent(){
console.log('fu')
},
doThis(){
console.log("danji")
}
}
})
</script>
</body>
</html>
<style>
.Odiv1{width: 80px;height: 80px;background: #aaa;margin: 5px;}
.Odiv2{width: 50px;height: 50px;background: #ccc;}
</style>
Vue组件
案例:多个按钮单击计算次数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<my-component></my-component>
<my-component></my-component>
<my-component></my-component>
</div>
<script>
// 创建组件
Vue.component('my-component',{
data(){
return {
count:0
}
},
template:'<button v-on:click="count++">被单击{{count}}次</button>'
}
)
var vm=new Vue({el:'#app'})
</script>
</body>
</html>
局部注册组件component
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<my-component></my-component>
</div>
<script>
var com1={
template:'<p>我是vm实例中局部组件</p>'
}
var vm=new Vue({
el:'#app',
//注册局部组件
components:{ myComponent:com1}
})
</script>
</body>
</html>
template模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<p>{{title}}</p>
<hr/>
<!-- 这是实现的 -->
<my-component></my-component>
</div>
<template id="tmp1">
<p>{{title}}</p>
</template>
<script>
Vue.component('my-component',{
template:'#tmp1',
data(){
return {
title:'我是组件内的title'
}
}
})
var vm=new Vue({
el:'#app',
data:{
title:'我是vm实例中的title'
}
})
</script>
</body>
</html>
prop传值子类接收父类
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<my-parent name="title"></my-parent>
</div>
<template id="template1">
<div>我是父组件{{name}}</div>
</template>
<script>
Vue.component('my-parent',{
template:'#template1',
props:['name'],
})
var vm=new Vue({el:'#app'})
</script>
</body>
</html>
$emit传值子类传父类
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<parent></parent>
</div>
<template id="child">
<div>
<hr />
<button @click="click">send</button>
<input type="text" v-model="message">
</div>
</template>
<script>
Vue.component('parent', {
template: '<div><child @childFn="transContent"></child>'+'子组件传来的值:{{message}}</div>',
data() {
return {
message: '11'
}
},
methods: {
transContent(payload) {
this.message = payload
}
}
})
Vue.component('child', {
template: '#child',
data() {
return {
message: '我是子组件的消息'
}
},
methods: {
click() {
this.$emit('childFn', this.message);
}
}
})
var vm = new Vue({ el: '#app' })
</script>
</body>
</html>
组件切换
v-if实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<a href="#" @click.prevent="flag?flag:flag=!flag">登录</a>
<a href="#" @click.prevent="flag?flag=!flag:flag">注册</a>
<login v-if="flag"></login>
<register v-else="flag"></register>
</div>
<template id="login">
<div>登录界面</div>
</template>
<template id="register">
<div>注册界面</div>
</template>
<script>
Vue.component('login', {
template: '#login'
})
Vue.component('register', {
template: '#register'
})
var vm = new Vue({
el: '#app',
data: {
flag: true
}
})
</script>
</body>
</html>
is属性实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<a href="#" @click.prevent="comName='login'">登录</a>
<a href="#" @click.prevent="comName='register'">注册</a>
<component v-bind:is="comName"></component>
</div>
<template id="login">
<div>登录界面</div>
</template>
<template id="register">
<div>注册界面</div>
</template>
<script>
Vue.component('login', {
template: '#login'
})
Vue.component('register', {
template: '#register'
})
var vm = new Vue({
el: '#app',
data: {
comName: ''
}
})
</script>
</body>
</html>
加油!!!