Vue通过emit实现子组件给父组件传递数据

男娘i 2023-01-06 15:56 290阅读 0赞

Vue通过emit实现子组件给父组件传递数据

  • 1Vue通过emit实现子组件给父组件传递数据
    • 1.1编写一个emit事件
    • 1.2在子组件中绑定emit事件
    • 1.3在使用子组件标签的地方定义对应的方法接收该事件
    • 1.4在父组件中编写对应的方法
    • 1.5整体源码
    • 1.6测试

1Vue通过emit实现子组件给父组件传递数据

预计实现在输入框中输入数字之后,子组件和父组件中的数据都会变化

1.1编写一个emit事件

  1. methods:{
  2. send() {
  3. this.$emit('sendchange',this.dnum1);//第一个为事件的名字,第二个为传递的数据
  4. },
  5. send2(){
  6. this.$emit('send2change',this.dnum2);
  7. }
  8. }

1.2在子组件中绑定emit事件

  1. <template id="cpn1">
  2. <div>
  3. <h3>数1</h3>
  4. <p>props:{ { nnum1}}</p>
  5. <p>data:{ { dnum1}}</p>
  6. <input type="text" v-model="dnum1" @input="send">
  7. <h3>数2</h3>
  8. <p>props:{ { nnum2}}</p>
  9. <p>data:{ { dnum2}}</p>
  10. <input type="text" v-model="dnum2" @input="send2">
  11. </div>
  12. </template>

1.3在使用子组件标签的地方定义对应的方法接收该事件

  1. <cpn :nnum1="num1" :nnum2="num2"
  2. @sendchange="sendchange" @send2change="send2change"> </cpn> //@后面的就是事件名称

1.4在父组件中编写对应的方法

  1. const app = new Vue({
  2. el:"#app",
  3. data:{
  4. num1:1,
  5. num2:0
  6. },
  7. components:{
  8. cpn
  9. },
  10. methods:{
  11. sendchange(value){
  12. this.num1=parseInt(value);//此处就可以接收了
  13. },
  14. send2change(value){
  15. this.num2=parseInt(value);
  16. }
  17. }
  18. })

1.5整体源码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <cpn :nnum1="num1" :nnum2="num2"
  11. @sendchange="sendchange" @send2change="send2change"></cpn>
  12. </div>
  13. <template id="cpn1">
  14. <div>
  15. <h3>数1</h3>
  16. <p>props:{ { nnum1}}</p>
  17. <p>data:{ { dnum1}}</p>
  18. <input type="text" v-model="dnum1" @input="send">
  19. <h3>数2</h3>
  20. <p>props:{ { nnum2}}</p>
  21. <p>data:{ { dnum2}}</p>
  22. <input type="text" v-model="dnum2" @input="send2">
  23. </div>
  24. </template>
  25. <script src="D://VSCode/VueCdn文件/vue.js"></script>
  26. <script>
  27. const cpn={
  28. template:"#cpn1",
  29. data(){
  30. return {
  31. dnum1:this.nnum1,
  32. dnum2:this.nnum2
  33. }
  34. },
  35. props:{
  36. nnum1:{
  37. },
  38. nnum2:{
  39. }
  40. },
  41. methods:{
  42. send() {
  43. this.$emit('sendchange',this.dnum1);
  44. },
  45. send2(){
  46. this.$emit('send2change',this.dnum2);
  47. }
  48. }
  49. }
  50. const app = new Vue({
  51. el:"#app",
  52. data:{
  53. num1:1,
  54. num2:0
  55. },
  56. components:{
  57. cpn
  58. },
  59. methods:{
  60. sendchange(value){
  61. this.num1=parseInt(value);
  62. },
  63. send2change(value){
  64. this.num2=parseInt(value);
  65. }
  66. }
  67. })
  68. </script>
  69. </body>
  70. </html>

1.6测试

在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读

    相关 VUE组件组件传递数据

      在使用VUE开发的时候,有时候,我们需要通过父组件像子组件传递数据或者为了防止每个子组件都会有请求数据事件的发生,从而导致代码冗余,所以,我们可以把同一个模块下的所有子组