template
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<template v-if="isShow">
template
</template>
</div>
</body>
<script>
var app=new Vue({
el:"#app",
data:{
isShow:true
}
})
</script>
</html>
运行后可以发现template标签不显示
事件处理
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<!--js冒泡事件-->
<div @click="fun1">
其他内容
<h1 @click="fun2">
fun2
</h1>
</div>
</div>
</body>
<script>
var app=new Vue({
el:"#app",
methods:{
fun1:function(){
alert(1);
},
fun2:function(){
alert(2);
}
}
})
</script>
</html>
运行后我们点击
可以看到先弹出fun2里面的内容,再弹出fun1里面的。这个事件我们称为冒泡事件(向上传播)
那么有时候我们只想触发里面的内容,而不想外面的内容触发呢,很简单,只需要改
<!-- 阻止单击事件继续传播 -->
<h1 @click.stop="fun2">
fun2
</h1>
运行后再点击发现只触发fun2的内容了
prevent:阻止标签的默认事件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<!--js冒泡事件-->
<div @click="fun1">
其他内容
<!-- prevent 阻止标签的默认事件-->
<a @click.stop="fun2" href="https://www.baidu.com/">
fun2
</a>
</div>
</div>
</body>
<script>
var app=new Vue({
el:"#app",
methods:{
fun1:function(){
alert(1);
},
fun2:function(){
alert(2);
}
}
})
</script>
</html>
<a @click.stop.prevent="fun2" href="https://www.baidu.com/">
fun2
</a>
submit.prevent
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit">
<input type="text" id="name" /><br/>
<input type="text" id="password" />
<input type="submit" value="提交" />
</form>
</div>
</body>
<script>
var app=new Vue({
el:"#app",
methods:{
onSubmit:function(){
alert("提交成功");
}
}
})
</script>
</html>
运行后我们在输入框中输入值点击后发现值还在输入框里面
按键事件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<input @keyup="fun1" value="keyup事件" />
</div>
</body>
<script>
var app=new Vue({
el:"#app",
methods:{
fun1:function(){
alert(1);
}
}
})
</script>
</html>
可以发现不管是对框中的值的增加,删除,只要鼠标选中框摁键盘都会触发
选框
单选框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<input type="checkbox" v-model="myCheck" /><br/>
<h1>myCheck值:{{myCheck}}</h1>
</div>
</body>
<script>
var app=new Vue({
el:"#app",
data:{
myCheck:true
}
})
</script>
</html>
多选框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<input type="checkbox" value="1" v-model="myChecks" />王者<br/>
<input type="checkbox" value="2" v-model="myChecks"/>吃鸡<br/>
<input type="checkbox" value="3" v-model="myChecks" />LOL<br/>
<h1>myChecks的值:{{myChecks}}</h1>
</div>
</body>
<script>
var app=new Vue({
el:"#app",
data:{
myChecks:[]
}
})
</script>
</html>
单选
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
性别:{{sex}}<br/>
<input type="radio" value="男" v-model="sex"/>男
<input type="radio" value="女" v-model="sex" />女
</div>
</body>
<script>
var app=new Vue({
el:"#app",
data:{
sex:''
}
})
</script>
</html>
下拉框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<select v-model="sel">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
绑定的值是:{{sel}}
</div>
</body>
<script>
var app=new Vue({
el:"#app",
data:{
sel:""
}
})
</script>
</html>
lazy
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="name">
<p>姓名:{{name}}</p>
</div>
</body>
<script>
var app=new Vue({
el:"#app",
data:{
name:"aa"
}
})
</script>
</html>
输入完鼠标移开后下面才会改变值
组件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<com1 name="aa"></com1>
<com1 name="bb"></com1>
<com1 name="cc"></com1>
</div>
</body>
<script>
Vue.component("com1",{
//绑定外部的参数
props:["name"],
//声明组件数据(函数)
data(){
return{
str:"data"
}
},
template:'<h1>这里是组件{{name}}---{{str}}</h1>'
})
var app=new Vue({
el:"#app"
})
</script>
</html>
有个小特性:根级标签只能有一个,具体的例子:h1标签两个
template:'<h1></h1><h1>这里是组件{{name}}---{{str}}</h1>'
修改为:
template:'<div><h1></h1><h1>这里是组件{{name}}---{{str}}</h1></div>'
$emit
将template修改
template:`<div>
<h1>这里是组件{{str}}---{{name}}</h1>
<a @click="$emit('com')">点击</a>
</div>`
插槽
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="app">
<com1 name="aa" @com="fun1">
<h1>这里是插入组件的插槽</h1>
</com1>
<com1 name="bb"></com1>
<com1 name="cc"></com1>
</div>
</body>
<script>
Vue.component("com1",{
//绑定外部的参数
props:["name"],
//声明组件数据(函数)
data(){
return{
str:"data"
}
},
template:`<div>
<h1>这里是组件{{str}}---{{name}}</h1>
<slot></slot>
<a @click="$emit('com')">点击</a>
</div>`
})
var app=new Vue({
el:"#app",
methods:{
fun1:function(){
alert(1);
}
}
})
</script>
</html>