v-on的基本使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
<div @click="change()">点击</div>
<input @input="changeinput" />
</div>
<script>
const vm = new Vue({
el:'#app',
data(){
return {
}
},
methods:{
change(){
console.log('1111');
},
changeinput(){
console.log('222');
}
}
})
</script>
</body>
</html>
v-on的参数传递
- 事件没传参,可以省略()
- 事件调用方法传参了,写函数时候省略了小括号,但是函数本身是需要传递一个参数的,这个参数就是原生事件event参数传递进去
- 如果同时需要传入某个参数,同时需要event是,可以通过
$event
传入事件。
按钮4调用btnClick2(value){}
,此时undefined
。按钮5调用时省略了(),会自动传入原生event事件,如果我们需要event对象还需要传入其他参数,可以使用$event
对象。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
<!-- 事件没传参 -->
<button @click="btnClick">按钮1</button>
<button @click="btnClick()">按钮2</button>
<!-- 事件传参 -->
<button @click="btnClick(123)">按钮3</button>
<button @click="btnClick()">按钮4</button>
<!-- 注意
如果我只要传递e事件 那么可以不写参数,当然也可以写一个参数叫$event
<button @click="btnClick">按钮5</button>
<button @click="btnClick($event)">按钮5</button> -->
<!-- 事件传多个参 -->
<!-- 如果我要传递多个参数 那么既要写参数,也要写$event,方法中用e和形参进行接收
<button @click="btnClick($event,123)">按钮6</button> -->
</div>
<script>
const vm = new Vue({
el: '#app',
data() {
return {
}
},
methods: {
/* btnClick() {
console.log("点击XXX");
}, */
/* btnClick(val) {
console.log(`点击了${val}`);
} */
/* btnClick(e) {
console.log(e);
} */
btnClick(e,val) {
console.log(e+'-----'+val);
}
}
})
</script>
</body>
</html>
v-on的事件修饰词
.stop
的使用,btn的click事件不会传播,不会冒泡到上层,调用event.stopPropagation()
。.prevent
调用event.preeventDefault
阻止默认行为。.enter
监听键盘事件;once
事件只触发一次(常用); 5.capture
使用事件的捕获模式; 6.self
只有event.target是当前操作的元素时才触发事件; 7.passive
事件的默认行为立即执行,无需等待事件回调执行完毕; 1.Vue中常用的按键别名: 回车 => enter 删除 => delete (捕获“删除”和“退格”键) 退出 => esc 空格 => space 换行 => tab (特殊,必须配合keydown去使用) 上 => up 下 => down 左 => left 右 => right 2.Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名) 3.系统修饰键(用法特殊):ctrl、alt、shift、meta (1).配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。 (2).配合keydown使用:正常触发事件。 4.也可以使用keyCode去指定具体的按键(不推荐) 5.Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键别名
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<style>
.div {
width: 200px;
height: 100px;
background: #f00;
overflow: scroll;
}
</style>
</head>
<body>
<div id="app">
<!--1. .stop的使用,btn的click事件不会传播,不会冒泡到上层,调用event.stopPropagation() 常用-->
<div @click="divClick" class="div">
<button type="button" @click.stop="btnClick">点击</button>
</div>
<!-- 2. .prevent 调用event.preventDefault阻止默认行为 常用-->
<a href="http://www.baidu.com" @click.prevent="change">去百度</a>
<!--3. 修饰符可以串联 常用-->
<div @click="divClick" class="div">
<a href="http://www.baidu.com" @click.stop.prevent="change2">去百度</a>
</div>
<!-- 4. 添加事件监听器时使用事件捕获模式 不常用-->
<!-- <div class="box1" @click.capture="show(111)">
div1外面
<div class="box2" @click="show(222)">
div2里面
</div>
</div> -->
<!-- 5. 只当在 event.target 是当前元素自身时触发处理函数 不常用 -->
<!-- <div class="div" @click.self.prevent="showself">
<button @click.self.prevent="showself">点我</button>
</div> -->
<!-- 6. 点击事件将只会触发一次 不常用-->
<!-- <a @click.once="doThis">点击触发</a> -->
<!-- 7. .passive 修饰符尤其能够提升移动端的性能。不常用 -->
<!-- <div class="div" @wheel.passive="onScroll">
滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发
</div> -->
<!-- <div @scroll="onScroll" class="div">滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发</div> -->
</div>
<script>
const vm = new Vue({
el: '#app',
data() {
return {
}
},
methods: {
divClick() {
console.log('点击了div');
},
btnClick() {
console.log('点击了btn');
},
change() {
console.log('阻止了默认行为');
},
change2() {
console.log('阻止了默认行为也阻止了冒泡');
},
show(msg) {
console.log(msg);
},
showself() {
console.log('我是点击自身才触发');
},
doThis() {
console.log('点击了a');
},
onScroll(){
for(let i = 0;i<5000;i++){
console.log('@');
}
console.log('333333');
}
/* onScroll(){
for (let i = 0; i < 10000; i++) {
console.log('@');
}
console.log('333333');
} */
}
})
</script>
</body>
</html>
v-on的按键修饰符
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
<form @submit.prevent='' action="psy.jsp">
账号<input type="text" name="user" />
<!-- 密码<input type="text" name="password" @keyup.enter="submit" /> 常用-->
<!-- 密码<input type="text" name="password" @keyup.13="submit" /> 不常用 不推荐-->
密码<input type="text" name="password" @keyup.huiche="submit" /><!-- 不常用 不推荐 -->
<input type="submit" value="登录" />
</form>
</div>
<script>
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
Vue.config.keyCodes.huiche = 13//不常用 不推荐
const vm = new Vue({
el: '#app',
data() {
return {
}
},
methods: {
submit() {
console.log('keyup点击');
}
}
})
</script>
</body>
</html>
失去焦点时登录
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
<form @submit.prevent=''>
账号<input type="text" name="user" />
密码<input type="text" name="password" @keyup.enter="submit" />
<input type="submit" value="登录" @keyup.enter="submit" />
</form>
</div>
<script>
const vm = new Vue({
el: '#app',
data() {
return {
}
},
methods:{
submit(){
console.log('keyup点了');
}
},
created() {//生命周期
document.onkeydown = (e)=>{
e = window.event || e;
console.log(e);
if(e.code == 'Enter'||e.code=='enter'){
this.submit()
}
}
}
})
</script>
</body>
</html>