Vue $emit() 方法

实例

单击按钮时,使用 $emit() 方法向父组件触发自定义事件。

  1. <template>
  2. <div>
  3. <h3>ChildComp.vue</h3>
  4. <p>Click the button to trigger the custom event up to the parent component using the $emit() method.</p>
  5. <button v-on:click="this.$emit('custom-event')">Trigger</button>
  6. </div>
  7. </template>

定义与用法

内置的 $emit() 方法触发一个自定义事件,该事件用于与父组件进行通信。

参数描述
Custom event name默认。第一个参数是用 $emit() 方法触发的自定义事件的名称
More arguments可选。一个或多个参数可以与自定义事件一起作为 payload(有效载荷)发送(参见下面的实例1和2。)

Emits 选项可用于记录组件发送的内容。使用 emits 选项可以提高可读性,但这不是必需的。(参见下面的实例3。)

Props 用于传达相反的方向:从父组件向下到子组件。

更多实例

实例 1

使用 $emit() 方法向父组件发送消息,并使用 'message-sent' 自定义事件。

  1. <template>
  2. <div>
  3. <h3>ChildComp.vue</h3>
  4. <p>Write something, and send the message up to the parent component using the $emit() method.</p>
  5. <input type="text" v-model="message" placeholder="write something..">
  6. <button v-on:click="send">Send</button>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. data() {
  12. return {
  13. message: null
  14. }
  15. },
  16. methods: {
  17. send() {
  18. this.$emit('message-sent',this.message);
  19. }
  20. }
  21. }
  22. </script>
  23. <style scoped>
  24. div {
  25. border: solid black 1px;
  26. padding: 10px;
  27. max-width: 350px;
  28. margin-top: 20px;
  29. }
  30. input {
  31. display: block;
  32. margin-bottom: 15px;
  33. }
  34. </style>
实例 2

使用 $emit() 方法向父组件发送产品名称和评级。

  1. <template>
  2. <div>
  3. <h3>ChildComp.vue</h3>
  4. <p>Rate a product:</p>
  5. <input type="text" v-model="productName" placeholder="Product name.." ref="inpName">
  6. <input type="number" v-model="productRating" placeholder="Rating 1 to 10..">
  7. <button v-on:click="send">Register</button>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. data() {
  13. return {
  14. productName: null,
  15. productRating: null
  16. }
  17. },
  18. methods: {
  19. send() {
  20. this.$emit('message-sent',this.productName,this.productRating);
  21. this.productName = null;
  22. this.productRating = null;
  23. this.$refs.inpName.focus();
  24. }
  25. },
  26. mounted() {
  27. this.$refs.inpName.focus();
  28. }
  29. }
  30. </script>
  31. <style scoped>
  32. div {
  33. border: solid black 1px;
  34. padding: 10px;
  35. max-width: 350px;
  36. margin-top: 20px;
  37. }
  38. input {
  39. display: block;
  40. margin-bottom: 15px;
  41. }
  42. </style>
实例 3

使用 emits 选项来记录组件通过 $emit() 方法发出的内容。这不是必需的,但它提高了可读性。

  1. <template>
  2. <div>
  3. <h3>ChildComp.vue</h3>
  4. <p>Click the button to trigger the custom event up to the parent component using the $emit() method.</p>
  5. <button v-on:click="this.$emit('custom-event')">Trigger</button>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. emits: ['custom-event']
  11. }
  12. </script>
  13. <style scoped>
  14. div {
  15. border: solid black 1px;
  16. padding: 10px;
  17. max-width: 350px;
  18. margin-top: 20px;
  19. }
  20. </style>

分类导航