事件处理
如果需要在内联语句处理器中访问原生DOM事件。可以使用特殊变量$event,把它传入到methods中的方法中。
在Vue中,事件修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间去处理这些烦恼的事情,而能有更多的精力专注于程序的逻辑处理。在Vue中事件修饰符主要有:
.stop:等同于JavaScript中的event.stopPropagation(),防止事件冒泡
.prevent:等同于JavaScript中的event.preventDefault(),防止执行预设的行为(如果事件可取消,则取消该事件,而不停止事件的进一步传播)
.capture:与事件冒泡的方向相反,事件捕获由外到内
.self:只会触发自己范围内的事件,不包含子元素
.once:只会触发一次
.prevent取消默认事件
.prevent等同于JavaScript的event.preventDefault(),用于取消默认事件。比如我们页面的<a href="#">标签,当用户点击时,通常在浏览器的网址列出#:
.capture 捕获事件
捕获事件:嵌套两三层父子关系,然后所有都有点击事件,点击子节点,就会触发从外至内 父节点-》子节点的点击事件
.stop 防止事件冒泡
冒泡事件:嵌套两三层父子关系,然后所有都有点击事件,点击子节点,就会触发从内至外 子节点-》父节点的点击事件
防止冒泡事件的写法是:在点击上加上.stop相当于在每个方法中调用了等同于event.stopPropagation(),点击子节点不会捕获到父节点的事件
.self
修饰符.self只会触发自己范围内的事件,不会包含子元素。
<div id="app">
<div class="outeer" @click.self="outer">
<div class="middle" @click.self="middle">
<button @click.stop="inner">点击我(^_^)</button>
</div>
</div>
</div>
.once 只执行一次点击
如果我们在@click事件上添加.once修饰符,只要点击按钮只会执行一次。
<script src="./js/vue.js"></script>
<style>
.inner{
height:100px;
width:100px;
}
.red{
background-color: red;
}
</style>
</head>
<body>
<div id="app">
<div :style="{width:200+'px', height:200+'px', 'background-color':'gray'}" @click.capture="click1">
<div :class="['inner','red']" @click.self.stop="click2">
<button @click.stop="click3">按钮</button>
</div>
</div>
<form action="" @submit.prevent="submit">
<input type="text" name="username">
<input type="reset" value="重置">
<input type="submit" value="提交">
</form>
</div>
<script>
let vm = new Vue({
el: "#app",
data: {
},
merhods:{
click1(){
console.log("200")
},
click2(){
console.log("100")
},
click3(){
console.log("btn")
},
submit(){
console.log("我要自己提交,不要你处理")
}
}
})
</script>
</body>
关于class:
<style>
.h{
font-size: 36px;
}
.b{
font-weight: bolder;
}
.i{
font-style: initial;
}
.u{
text-decoration: underline;
}
</style>
<script src="./js/vue.js"></script>
<body>
<div id="app">
<!--{类名:true或false}-->
<p :class="{u:u, i:true, h:1}">段落1</p>
<!--数组:变量或常量的组合-->
<p :class="[h,b,'u']">段落2</p>
<p :class="[true?h:'u']">段落3</p>
<!-- <p :class="[{h:true}]">段落4</p> -->
<p :class="[{u:u},h]">段落4</p>
</div>
<script>
let vm = new Vue({
el: "#app",
data: {
u:true,
h:"h",
b:"b"
}
})
</script>
</body>
运行如下:
关于style:
<body>
<div id="app">
<p :style="{'font-size':20+'px', backgroundColor:'red'}">段落</p>
<!-- <p :style="{'font-size':20, backgroundColor:'blue'}">段落</p> -->
<p :style="{transform:'rotate(7deg)'}">段落</p>
</div>
<script>
let vm = new Vue({
el: "#app",
data: {
}
})
</script>
</body>
运行如下: