之前的文章介绍了 vue 的组件化,本章我们来看一下 vue 中组件的原生事件。

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<child @click="handleFatherClick"></child>
</div>
<script>
Vue.component("child", {
template: `
<p>child</p>
`
});
var app = new Vue({
el: '#app',
methods: {
handleFatherClick() {
console.log("father click")
}
}
})
</script>
</body>
</html>

如上图代码,我们在子组件 child 上绑定了一个 click 事件,并在父组件的 methods 中打印输出日志,结果在控制台并没有打印出我们想要的东西。这是由于现在的 click 事件是一个自定义的事件,并不是原生的 click 事件,这样的写法我们在父子组件间传值时使用过,如下代码:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<child @click="handleFatherClick"></child>
</div>
<script>
Vue.component("child", {
methods: {
handleChildClick(){
console.log("child click")
}
},
template: `
<p @click="handleChildClick">child</p>
`
});
var app = new Vue({
el: '#app',
methods: {
handleFatherClick(){
console.log("father click")
}
}
})
</script>
</body>
</html>
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<child @click="handleFatherClick"></child>
</div>
<script>
Vue.component("child", {
methods: {
handleChildClick() {
console.log("child click");
this.$emit('click');
}
},
template: `
<p @click="handleChildClick">child</p>
`
});
var app = new Vue({
el: '#app',
methods: {
handleFatherClick() {
console.log("father click")
}
}
})
</script>
</body>
</html>

在父子组件传值的文章中我们是通过 $emit 触发一个自定义事件,然后通过该自定义事件绑定在父组件的 methods 属性的方法上来传值的。在上面的代码中我们在子组件的 p 标签上绑定了一个 click 事件,该事件为原生事件,我们通过该事件的 handleChildClick() 方法,并通过 $emit 向外触发了一个 click 的事件,在 <child> 标签中,我们再通过父组件方法中的 handleFatherClick() 方法来绑定此触发事件,这样就可以运行父组件的 handleFatherClick() 事件了,如下结果:

当我们点击页面上的 child 时,根据日志输出可以看出:先触发子组件的原生 click 事件,然后通过子组件自定义的 click 事件向外触发的方式触发了父组件的 click 事件。

但是如果这样写看起来十分麻烦,那我们可不可以不通过子组件的自定义事件来触发父组件的 click 原生事件呢,Vue 官方为我恩提供了 native 原生事件方法,如下:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<child @click.native="handleFatherClick"></child>
</div>
<script>
Vue.component("child", {
template: `
<p>child</p>
`
});
var app = new Vue({
el: '#app',
methods: {
handleFatherClick() {
console.log("father click")
}
}
})
</script>
</body>
</html>

我们不通过子组件向外触发事件,而是直接在 <child> 标签上的 click 方法上加了 .native 属性,它的意思是触发父组件原生的 click 事件,这样就能达到和上面一样的效果。如下:

Vue 进阶之路(十)的更多相关文章

  1. Vue 进阶之路(九)

    之前的文章我们介绍了 vue 中父组件之间的传值,本章我们再来看一下父子组件间传值的参数校验和非 Props 特性. <!DOCTYPE html> <html lang=" ...

  2. Vue 进阶之路(八)

    之前的文章我们对组件 component 进行了简单的介绍,本章我们将深入了解一下组件,并实现父子组件间的传值. <!DOCTYPE html> <html lang="e ...

  3. Vue 进阶之路(七)

    之前的文章我们对 vue 的列表输出做了介绍,本章我们来看一下 vue 的组件 component. <!DOCTYPE html> <html lang="en" ...

  4. Vue 进阶之路(六)

    上篇文章我们分析了一下 vue 中的条件渲染,本篇我们说一下 vue 中的列表渲染和 set 方法. <!DOCTYPE html> <html lang="en" ...

  5. Vue 进阶之路(五)

    之前的文章我们说了一下 vue 的样式绑定,这篇文章来介绍一下 vue 中的条件渲染,先看下面的代码: <!DOCTYPE html> <html lang="en&quo ...

  6. Vue 进阶之路(四)

    之前的文章我们已经对 vue 有了初步认识,这篇文章我们通过一个例子说一下 vue 的样式绑定. 现在我们想要是想这样一个需求,页面上有个单词,当我们点击它的时候颜色变为红色,再点击一次变为原来的颜色 ...

  7. Vue 进阶之路(三)

    之前的文章我们已经对 vue 有了初步认识,这篇文章我们通过一个例子说一下 vue 的方法 methods,计算属性 computed 和监听器 watch. 现在我们有一个需求,变量 firstNa ...

  8. Vue 进阶之路(二)

    之前的文章我们初识了 vue,对其原理,数据绑定和方法进行了简单的演示,本篇将对 vue 插值表达式,v-text,v-html 进行讲解. <!DOCTYPE html> <htm ...

  9. Vue 进阶之路(一)

    vue 3.x 马上就要问世了,显然尤大大是不想让我们好好活了,但是转念一想,比你优秀的人都还在努力,那我们努力还有什么用,开个玩笑而已,本人对于 vue 的接触时间不长,对其也没有深入地去研究源码, ...

随机推荐

  1. nzhtl1477-ただいま帰りました ( bfs )

    nzhtl1477-ただいま帰りました 题目描述 珂学题意: 你是威廉!你要做黄油蛋糕给珂朵莉吃~! 68号岛有n个商店,有的商店直接有小路连接,小路的长度都为1 格里克告诉了你哪些地方可能有做黄油蛋 ...

  2. 一款APP的交互文档从撰写到交付

    我第一份工作的设计总监是前百度设计师,34岁,一线设计12年:今年聊天说转了产品总监,如今39岁还活跃在行业中…… 我第二份工作的部门总监是前腾讯工程师,38岁,一线开发14年:2年前在Q群里跟我们说 ...

  3. UEdit百度富文本编辑器

    1.下载地址:http://ueditor.baidu.com/website/download.html 2.引入js/css/语言包 3.表单id设置 3.js代码

  4. c++ 博客资源

    /************************************************************** 技术博客 http://www.cnblogs.com/itdef/   ...

  5. 2018.10.19 NOIP训练 变化的序列(线性dp)

    传送门 f[i][j]f[i][j]f[i][j]表示后iii个对答案贡献有jjj个a的方案数. 可以发现最后a,ba,ba,b的总个数一定是n∗(n−1)/2n*(n-1)/2n∗(n−1)/2 因 ...

  6. 2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)

    传送门 dp好题. 每一天要变更路线一定还是走最短路. 所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路.显然是可以dp的. 设f[i]表示第i天的最优花销.那么我们枚举在 ...

  7. hdu-1175(bfs+剪枝)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 思路:用bfs,注意要转弯的次数,次数大于两次就跳过. #include<iostream ...

  8. 命令行中开启mySQL数据库服务

    sudo /Applications/XAMPP/xamppfiles/bin/mysql.server start  

  9. 点云库PCL学习

    1. 点云的提取 点云的获取:RGBD获取 点云的获取:图像匹配获取(通过摄影测量提取点云数据) 点云的获取:三维激光扫描仪 2. PCL简介 PCL是Point Cloud Library的简称,是 ...

  10. ( KMP 求循环节的个数)Power Strings -- poj -- 2406

    链接: http://poj.org/problem?id=2406 Power Strings Time Limit:3000MS     Memory Limit:65536KB     64bi ...