Vuejs2 Vue.js 2中的自定义事件

Vuejs2 Vue.js 2中的自定义事件,vuejs2,vue-component,Vuejs2,Vue Component,我试图弄清楚如何让子组件与父组件通信,而不必在它们之间进行硬绑定 据我所知,定制事件应该是最重要的。但我无法让父组件接收事件并对其执行操作 在下面的示例中,我希望单击中的“Do stuff”按钮触发中的doStuff()。我看到了表明按钮被单击的日志消息,但没有看到表明父级曾经接收到发出的消息的日志消息 示例HTML: <!DOCTYPE html> <html> <head> <script src="https://cdn.jsdeliv

我试图弄清楚如何让子组件与父组件通信,而不必在它们之间进行硬绑定

据我所知,定制事件应该是最重要的。但我无法让父组件接收事件并对其执行操作

在下面的示例中,我希望单击
中的“Do stuff”按钮触发
中的
doStuff()
。我看到了表明按钮被单击的日志消息,但没有看到表明父级曾经接收到发出的消息的日志消息

示例HTML:

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>

  <body>
    <div id="app">
      <parent>
        <child></child>
      </parent>
    </div>
  </body>
</html>
Vue.component('parent', {
    props: [],
    template: `
        <div v-on:stuff="doStuff">
            <h1>Hello World (from parent)!</h1>
            <slot></slot>
        </div>
    `,
    methods: {
      doStuff: function() {
        console.log('Do stuff');
      }
    }
});

Vue.component('child', {
    props: [],
    template: `
        <div>
            Hello World (from child)!<br>
            <button v-on:click="performClick">Do stuff</button>
        </div>
    `,
    methods: {
      performClick: function() {
        console.log('Do something');
        this.$emit('stuff');
      }
    }
});

var app = new Vue({
  el: '#app',
})

示例Javascript:

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>

  <body>
    <div id="app">
      <parent>
        <child></child>
      </parent>
    </div>
  </body>
</html>
Vue.component('parent', {
    props: [],
    template: `
        <div v-on:stuff="doStuff">
            <h1>Hello World (from parent)!</h1>
            <slot></slot>
        </div>
    `,
    methods: {
      doStuff: function() {
        console.log('Do stuff');
      }
    }
});

Vue.component('child', {
    props: [],
    template: `
        <div>
            Hello World (from child)!<br>
            <button v-on:click="performClick">Do stuff</button>
        </div>
    `,
    methods: {
      performClick: function() {
        console.log('Do something');
        this.$emit('stuff');
      }
    }
});

var app = new Vue({
  el: '#app',
})
Vue.component('parent'{
道具:[],
模板:`
世界你好(来自家长)!
`,
方法:{
doStuff:function(){
log('Do stuff');
}
}
});
Vue.component('子'{
道具:[],
模板:`
你好,世界(来自儿童)!
做事 `, 方法:{ performClick:function(){ log('Do something'); 这个。$emit('stuff'); } } }); var app=新的Vue({ el:“#应用程序”, })
您访问的文件不正确<代码>填充是从子组件发出的,所以您需要访问子组件标记中发出的,所以您应该在父组件模板中使用子组件标记。如下

Vue.component('parent'{
道具:[],
模板:`
世界你好(来自家长)!
`,
方法:{
doStuff:function(){
log('Do stuff');
}
}
});
Vue.component('子'{
道具:[],
模板:`
你好,世界(来自儿童)!
做事 `, 方法:{ performClick:function(){ log('Do something'); 这个。$emit('stuff'); } } }); var app=新的Vue({ el:“#应用程序” })


问题出在div上,而不是任何组件。感谢您的澄清。问题是,在我预期的情况下,
组件可以是任何类型内容的包装器,因此我不能“硬编码”子组件。最终结果将是父组件是一个具有可变内容的弹出气泡。子组件可以是文本、表单、选项菜单等。我希望子组件能够在子组件执行某些操作后向其发送
close
消息。