Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么$emit不能在我的vue组件中工作

为什么$emit不能在我的vue组件中工作
EN

Stack Overflow用户
提问于 2018-05-10 17:58:13
回答 3查看 33.6K关注 0票数 8

我已经为这个问题绞尽脑汁了好几个小时了。我看不出有什么问题,根据我所能说的,我正在遵循这里的文档:https://vuejs.org/v2/guide/components-custom-events.html

下面的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<div id="wrap">
  <test-listen>
    <test-emit></test-emit>
  </test-listen>
</div>
<script>
Vue.component('test-listen', {
  data: function(){
    return {};
  },
  methods: {
    customHandler : function(e){
      console.log(e);
      console.log("works");
    }
  },
  template: `
    <div class='test_listen' v-on:custom="customHandler">
      <slot></slot>
    </div>
  `
});

Vue.component('test-emit',{
  data: function(){
    return {};
  },
  methods: {
    clickHandler : function(){
      this.$emit('custom');
    }
  },
  template : `
    <div class='test_emit' v-on:click="clickHandler">
      test
    </div>
  `
});

new Vue({
  el:"#wrap"
});
</script>
<style>
.test_listen{
  display:block;
  padding:20px;
  border:1px solid #000;
}
.test_emit{
  display:block;
  width:100px;
  height:100px;
  background-color:#f0f;
  color:#fff;
  font-weight:700;
  font-size:20px;
}
</style>

但是监听器肯定是绑定到元素的,因为如果我发送一个vanillaJS CustomEvent,它就会很好地触发控制台日志。我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-10 19:25:06

这里有两件事是错误的。

我猜

  1. Vue事件只能绑定到组件(这里说的是vue事件)
  2. 插槽不适合处理事件。(Source - Evan You,Vue作者)

如果你真的想不受限制地到处传递数据,最好使用 Global Event Bus Approach

您的代码的

工作示例,只做了一些细微的修改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<div id="wrap">
  <test-listen>
  </test-listen>
</div>
<script>
Vue.component('test-listen', {
  data: function(){
    return {};
  },
  methods: {
    customHandler : function(e){
      console.log(e);
      console.log("works");
    }
  },
  template: `
    <div class='test_listen' >
      <test-emit v-on:custom="customHandler"></test-emit>
    </div>
  `
});

Vue.component('test-emit',{
  data: function(){
    return {};
  },
  methods: {
    clickHandler : function(e){
      // e => event : didnt pass here as console will stuck so
      this.$emit('custom', 'somedata');
    }
  },
  template : `
    <div class='test_emit' v-on:click="clickHandler">
      test
    </div>
  `
});

new Vue({
  el:"#wrap"
});
</script>
<style>
.test_listen{
  display:block;
  padding:20px;
  border:1px solid #000;
}
.test_emit{
  display:block;
  width:100px;
  height:100px;
  background-color:#f0f;
  color:#fff;
  font-weight:700;
  font-size:20px;
}
</style>

票数 4
EN

Stack Overflow用户

发布于 2018-05-10 19:12:19

我在这里只看到一个错误。您应该将v-on添加到子组件中。当你从内部执行$emit('custom')时,它会在父组件上调用"customHandler“。

Working jsfiddle

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <test-listen>
        <test-emit v-on:custom="customHandler"></test-emit>
    </test-listen>
票数 13
EN

Stack Overflow用户

发布于 2018-05-10 19:06:00

With this.$emit()是对父组件说,嘿,我创建了一个事件,现在你可以监听这个事件了

你做得很好,但是你没有在父组件中监听由子组件发出的事件。I made it to work.Click here to see it in action

因此,为了让您的代码正常工作,在test-listen组件中,使用test-emit组件作为子组件。

然后在div #wrap中使用测试侦听组件

你的问题是你没有监听父组件中的事件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50278842

复制
相关文章
Vue自定义组件-属性使用
自定义组件Button <template> <button> <span>{{ msg }}</span> </button> </template> <script> export default { props: { msg: { default: '下载' } } } </script> 组件使用 <template> <div id="myButton"> <ex-btn :msg="msg1"></ex-btn>
苦咖啡
2019/12/11
7430
CSS 自定义属性进阶使用 (二)
通常,为了实现可复用可定制的模块,我希望将某个实现抽象化。例如,下面这段CSS代码:
前端修罗场
2023/10/07
1800
CSS 自定义属性进阶使用 (二)
android自定义属性
1、引言 对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现: 自定义一个CustomView(extends View )类 编写values/attrs.xml,在其中编写styleable和item等标签元素 在布局文件中CustomView使用自定义的属性(注意namespace) 在CustomView的构造方法中通过TypedArray获取 ps:如果你对上述几个步骤不熟悉,建议先熟悉下,再继续~ 那么,我有几个问题: 以上步骤是如何奏效的? styleable 的含义是什么?
xiangzhihong
2018/02/01
2.2K0
自定义属性操作
 element.属性 获取属性值。  element.getAttribute('属性');
梨涡浅笑
2020/10/27
7930
自定义属性操作
自定义属性目的:是为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。
星辰_大海
2020/09/30
8440
Android 自定义 view 之自定义布局属性 xml 属性
上一篇点击查看 https://blog.csdn.net/qq_43377749/article/details/91045764 我们讲到了自定义 view 的基本方式,但是我们也发现,使用这种方式,用户(广大程序员同胞们)只能使用父类控件的属性,但是我们有时需要更多的功能,比如:图片控件需要改变透明度,卡片控件需要设定阴影值等等,那么父类控件的属性显然不够用了,这时我们就要开始实现自定义布局。
圆号本昊
2021/09/24
1K0
Android 自定义 view 之自定义布局属性 xml 属性
使用CSS自定义属性实现骨架屏
其实这篇文章网上已经有翻译版本,但是读起来明显是机翻的,实在是受不了,于是就用自己的理解翻译了一下
coder_koala
2022/11/28
9480
使用CSS自定义属性实现骨架屏
【CSS】CSS自定义属性进阶使用(一)
在传统的CSS中,通常我们需要写重复的属性值,而自定义原则能让我们避免这种情况。做到“一处定义,处处使用”。
前端修罗场
2023/10/07
2450
Angular 自定义属性指令
本文将使用 UltimateAngular/angular-pro-src 中的示例,来一步步介绍自定义属性指令的相关知识。在正式开发前,我们可以先看一下,最终效果 Stackblitz - Custom-Attribute-Directive。
阿宝哥
2019/11/05
2.1K0
自定义属性--和calc
最近在弄练习写demo11,写到有关于 --XXX的自定义属性,calc,平时很少用,比较生面口,于是将它mark下来。
张炳
2019/08/02
7280
自定义属性--和calc
spring 自定义配置属性
完成以上几步后构建项目就会在META-INF下生成文件spring-configuration-metadata.json里面包含配置属性的信息 在IDEA环境中编辑对应配置文件会根据这个文件的信息提供感知
路过君
2020/06/19
5180
springboot引用自定义属性
在application.yml 自定义 在需要引用到的变量声明处使用 @Value("${ficos.market-version}") 样例 @Value("${ficos.market-version}") public String mv="1.0"; 注意,如果变量声明在构造函数外,那么这里我运行的时候发现他晚于构造函数赋值 如果要在构造函数里面使用,这里是我查到的,没有试验过
全栈程序员站长
2021/04/07
4670
Android 自定义删除 View
目标:实现一个点击删除的Item 效果图如下:我知道作为研发肯定会吐槽这个删除的设计,但是我还是要上图,不然我们岂不是不明真相的吃瓜群众… 两个删除的按钮 点击减号出现垃圾桶 点击垃圾桶删除当前的i
非著名程序员
2018/02/02
1.2K0
Android 自定义删除 View
使用 data-* 属性来嵌入自定义数据:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112709.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
3330
Android自定义属性TypedArray详解
大家好,我是程序员双木L,后续会发专题类的文章,这是自定义控件的第一篇,之后也会陆续更新相关的文章,欢迎关注。
SoullessCoder
2021/05/13
1.5K0
Android自定义属性TypedArray详解
8.2 自定义 Git - Git 属性
你也可以针对特定的路径配置某些设置项,这样 Git 就只对特定的子目录或子文件集运用它们。 这些基于路径的设置项被称为 Git 属性,可以在你的目录下的 .gitattributes 文件内进行设置(通常是你的项目的根目录)。如果不想让这些属性文件与其它文件一同提交,你也可以在 .git/info/attributes文件中进行设置。
shaonbean
2019/05/26
7530
java 获得xml自定义属性
xmlKit import com.jfinal.weixin.sdk.utils.IOUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.xml.namespa
DencyCheng
2019/02/27
7630
实战spring自定义属性(schema)
spring启动后,dubbo的本地运行时环境就会获取到这些信息,根据这些信息完成注册服务,今天我们实战的内容就是开发一个类似的自定义属性,然后在spring项目中使用这个属性;
程序员欣宸
2020/05/26
6330
JS 操作 HTML 自定义属性
<input type="text" id="txtBox" displayName="123456" />   获取自定义属性值:  document.getElementById("txtBox").getAttribute("displayName");    document.getElementById("txtInput").attributes["displayName"].nodeValue 设置自定义属性值: document.all.txtBox.setAttribute("displa
跟着阿笨一起玩NET
2018/09/18
1.9K0
CODING 敏捷开发:如何自定义属性
CODING 承载了最先进的敏捷研发理论,能够帮助您和您的团队快速入门敏捷研发,并通过标准化的流程和完整的信息统计成为企业实践敏捷研发的好工具。在上一篇视频指南中我们对敏捷项目管理中的工作流配置进行了介绍。本期视频中您可以根据企业的需要对需求/任务/缺陷的属性信息进行自定义。
腾讯云 CODING
2019/09/16
4070
CODING 敏捷开发:如何自定义属性

相似问题

PostSharp:使用OnMethodInvocationAspect时删除自定义属性

11

删除自定义属性

14

删除自定义属性

12

使用java库删除自定义属性

10

如何使用javascript删除自定义属性元素?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文