vue子组件向父组件传值的三种方式_vue子组件改变父组件的值

vue子组件向父组件传值的三种方式_vue子组件改变父组件的值1、前言日常积累,欢迎指正2、正文vue2.6.11博客正文为三种方法的核心代码记录,源代码在vue-project的分支dev-005,可以直接获取代码运行查看2.1、子组件中直接this.$parent.parentNameInParentMethod()/**父组件*/exportdefault{methods:{search…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、前言

日常积累,欢迎指正

2、正文

  • vue2.6.11
  • 博客正文为三种方法的核心代码记录,源代码在 vue-project 的分支 dev-005 ,可以直接获取代码运行查看

2.1、子组件中直接 this.$parent.parentNameInParentMethod()

/** 父组件 */
export default { 
   
    methods: { 
   
        searchEnter:function(){ 
   
            console.log('search enter')
        }
    }
}
/** 子组件 */
export default { 
   
  name: "HomeHeader",
  methods: { 
   
    enterFn: function() { 
   
      this.$parent.searchEnter()
    }
  }
}


 <input placeholder="请输入关键字" @keyup.enter="enterFn" />

如果有向父组件传参数的需求的话只需要添加参数即可

export default { 
   
  name: "Search",
  methods: { 
   
    enterFn: function() { 
   
      this.$parent.searchEnter(this.inputText)
    }
  },
  data() { 
   
    return { 
   
      inputText: ""
    };
  }
}
 <input placeholder="请输入关键字" v-model="inputText" @keyup.enter="enterFn" />

可以在调用时直接传参吗?

2.2、使用 $emit() 给组件一个自定义事件

子组件

export default { 
   
  name: "HomeHeader",
  methods: { 
   
    enterFn: function() { 
   
      this.$emit('enter');
    }
  }
}
<input @keyup.enter="enterFn" />

<!-- 或者 不借助当前组件的 enterFn 方法 直接使用内联语句 @keyup.enter="$emit('enter')" -->
 <input @keyup.enter="$emit('enter')" />

父组件

export default { 
   
  name: "HomeHeader",
  methods: { 
   
    searchEnter: function() { 
   
      console.log("search enter");
    }
  }
}
<Search @enter="searchEnter" />

如果要传参数的话

子组件

export default { 
   
  name: "HomeHeader",
  methods: { 
   
    enterFn: function() { 
   
      this.$emit('enter',this.inputText);
    }
  },
  data() { 
   
    return { 
   
      inputText: ""
    };
  }
}

<input @keyup.enter="enterFn" v-model="inputText" />
<!-- 这里也可以 不借助当前组件的 enterFn 方法 直接使用内联语句 @keyup.enter="$emit('enter',inputText)" -->
 <input @keyup.enter="$emit('enter',inputText)" v-model="inputText" />


父组件

export default { 
   
  name: "HomeHeader",
  methods: { 
   
    searchEnter: function(value) { 
   
      console.log("search enter");
      console.log(value)
    }
  }
}
<Search @enter="searchEnter" />

2.3、使用 props – 推荐

我是从 react 过来的,这种方式与 react 子组件向父组件传值(子组件调用父组件方法)非常相似

子组件

<input placeholder="请输入关键字" v-model="inputText" @keyup.enter="enterFn" />
<!-- 可以不借助 enterFn 方法直接 @keyup.enter="enter" 这种写法就不需要中间函数 enterFn 了 看起来更简洁 -->
<input placeholder="请输入关键字" v-model="inputText" @keyup.enter="enter" />

export default { 
   
  name: "Search",
  props: { 
   
    enter: { 
   
      type: Function,
      default: null
    }
  },
  methods: { 
   
    enterFn: function() { 
   
      if (this.enter) { 
   
        this.enter()
        this.enter(this.inputText) // 如果要传参数直接在这里传递就好了
      }
    }
  },
  data() { 
   
    return { 
   
      inputText: ""
    };
  }
};

父组件

<Search :enter="searchEnter"/>
import Search from "../Search/index.vue";
export default { 
   
  name: "HomeHeader",
  components: { 
   
    Search
  },
  methods: { 
   
    searchEnter: function() { 
   
      console.log("search enter");
    }
  }
};

如果想要传递参数的话


export default { 
   
  name: "Search",
  props: { 
   
    enter: { 
   
      type: Function,
      default: null
    }
  },
  methods: { 
   
    enterFn: function() { 
   
      if (this.enter) { 
   
        this.enter(this.inputText) // 
        /** * 在这里传递或直接内联调用 enter 方法传递 * * <input placeholder="请输入关键字" * v-model="inputText" * @keyup.enter="enter(inputText)" * /> */
      }
    }
  },
  data() { 
   
    return { 
   
      inputText: ""
    };
  }
};

父组件

<Search :enter="searchEnter"/>
import Search from "../Search/index.vue";
export default { 
   
  name: "HomeHeader",
  components: { 
   
    Search
  },
  methods: { 
   
    searchEnter: function(value) { 
   
      console.log("search enter")
      console.log(value)
    }
  }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186768.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JAVA合法标识符

    JAVA合法标识符Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。标识符组成Java标识符由数字,字母和下划线(_),美元符号($)组成。此处的字母并不局限于26个英文字母,而且可以包含中文字符、日文字符等。Java语言支持Unicode6.2.0字符集,因此Java的标识符可以使用Unicode6.

  • hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)

    hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)

  • java byte转中文乱码_java byte转string 涉及到字节流中有中文[通俗易懂]

    java byte转中文乱码_java byte转string 涉及到字节流中有中文[通俗易懂]最近遇到一个问题,我用java写了一个客户端通过socket向服务器端发送消息,发送的内容是字节流,编码格式是GBK,服务器在收到消息后,如果格式正确,会返回固定的消息格式,同样也是字节流,编码格式也是GBK。现在问题来了,我怎么把字节流转换为字符流,当然是要能显示出中文。于是上网搜了一下,找到一篇博客,网址如下:http://bbs.csdn.net/topics/391939108,代码如下:…

  • Couchbase vs Redis,究竟哪个更胜一筹?

    Couchbase vs Redis,究竟哪个更胜一筹?

  • 巧设IP路由 实现不同网段互通[通俗易懂]

    巧设IP路由 实现不同网段互通[通俗易懂]【简介】当一个局域网中必须存在两个以上网段时,分属于不同网段内的主机彼此互不可见。为了解决这个问题,就必须在不同的网段之间设置路由器。如果花费上万元资金购买一台路由器,仅仅用于连接局域网中的两个网段,实在不值得。有什么好的解决方案吗?当然有,这就是Windows中的IP路由。  当一个局域网中必须存在两个以上网段时,分属于不同网段内的主机彼此互不可见。为了解决这个问题,就必须在不同的网段之间设置…

  • 从零开始学习UCOSII操作系统12–内存管理

    从零开始学习UCOSII操作系统12–内存管理从零开始学习UCOSII操作系统12–内存管理前言:在标准的C语言中,可以用malloc()和free()2个动态的分配内存和释放内存,但是在嵌入式中,调用malloc()和free()却是非常危险的。因为多次调用这两个函数,会把原来的很大的一块连续的内存区域逐渐的分割成许多非常小的而且彼此又不相邻的内存块,也就是所谓的内存碎片。这样子的话,使得程序后面连一段非常小的内存都分

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号