Vue中父组件以及子组件传值问题

Vue中父组件以及子组件传值问题前言:在一些页面中不单单的纯纯的一个vue文件,vue讲究组件化开发,但是一般的肯定会产生交互事件,今天了解了这个传值,特此的来记录一下。目录一.父组件向子组件传值二.子组件向父组件传值一.父组件向子组件传值父组件向子组件传值会用到:Prop,一般的我们需要在子组件中进行相关的声明,如下所示:子组件为HellowWorld.vue<script>exportdefault{name:’HelloWorld’,//接收的变量props:{//声明相关的

大家好,又见面了,我是你们的朋友全栈君。

前言:在一些页面中不单单的纯纯的一个vue文件,vue讲究组件化开发,但是一般的肯定会产生交互事件,今天了解了这个传值,特此的来记录一下。


一.父组件向子组件传值

父组件向子组件传值会用到:Prop,一般的我们需要在子组件中进行相关的声明,如下所示:

子组件为HellowWorld.vue

<script>
export default { 
   
  name: 'HelloWorld',
  //接收的变量
  props: { 
   
  //声明相关的类型
    msg: String,
    count:Number,
    options:[]
  },
  data(){ 
   
    return{ 
   

    }
  },
  methods:{ 
   
  }
}
</script>

在父组件App.vue中

<template>
  <div id="app">
    <!-- msg为字符串类型,count为数字,options为数组 -->
    <HelloWorld msg="First App" :count='count' :options="options"/>
  </div>
</template>

<script> //引入组件 import HelloWorld from './components/HelloWorld.vue' export default { 
      name: 'App', components: { 
      HelloWorld }, data(){ 
      return{ 
      count:0, options:[], } }, methods:{ 
      } } </script>

那么在页面上效果就是:
在这里插入图片描述
当然我们也可以写一些事件来进行动态的数据交互,例如:
在这里插入图片描述

二.子组件向父组件传值

在子组件传值时会用到$emit值得注意的是:在子组件传值时候的方法要与父组件中监听的方法名称相同,也就是示例中的 listenToChild

Helloworld.vue子组件:

<template>
  <div class="hello">
    <!-- 文字信息 -->
    <h1 >{
  
  { msg }}</h1>
    <!-- 数字信息 -->
    <h2>{
  
  {count}}</h2>
    <!-- 渲染数组信息 -->
    <ul>
      <li v-for="(item,index) in options" :key="index">{
  
  {item}}</li>
    </ul>
    <!-- 进行传值 -->
    <button @click="SendMsg">点击</button>
  </div>
</template>

<script> export default { 
      name: 'HelloWorld', props: { 
      msg: String, count:Number, options:[] }, data(){ 
      return{ 
      } }, methods:{ 
      SendMsg(){ 
      // listenToChild 注意 this.$emit('listenToChild',this.options) } } } </script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped> h3 { 
      margin: 40px 0 0; } ul { 
      list-style-type: none; padding: 0; } /* li { display: inline-block; margin: 0 10px; } */ a { 
      color: #42b983; } </style>

App.vue父组件:

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <!-- listenToChild 为子组件传来的方法 -->
    <HelloWorld msg="First App" :count='count' :options="options" @listenToChild="show"/>
    <button @click="Add">+</button>
    <button @click="restart">置零</button>
    <button @click="Sub">-</button>
    <ul>
      <li v-for="(item,index) in data" :key="index">{
  
  {index}},{
  
  {item}}</li>
    </ul>
  </div>

</template>

<script> import HelloWorld from './components/HelloWorld.vue' export default { 
      name: 'App', components: { 
      HelloWorld }, data(){ 
      return{ 
      // 要传去子组件的参数 count:0, options:[], // 子组件传来的参数 data:[] } }, methods:{ 
      Add(){ 
      this.count=Number(this.count)+1 this.options.push('添加一次,当前数值为:'+this.count) }, Sub(){ 
      if(this.count<=0){ 
      this.options.push('当前数值不能变化了'+this.count) }else{ 
      this.count=Number(this.count)-1 this.options.pop() } }, show(data){ 
      console.log(data) this.data=data }, restart(){ 
      this.count=0 this.options=[] } } } </script>

<style> #app { 
      font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } button{ 
      margin: 20px; } ul { 
      list-style-type: none; padding: 0; } </style>

效果:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134842.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IDEA导入maven项目详细介绍「建议收藏」

    IDEA导入maven项目详细介绍「建议收藏」一、项目结构注意,.classpath是eclipse特有文件,如果项目会使用eclipse打开,请不要删除。二、导入项目1、打开Idea编辑器2、导入项目点击ImportProject按钮,界面如下注意,我们是导入maven项目,因此项目根目录下一定存在相对应的maven配置Pom.xml文件,点击OK,继续下一步。3、选择导入的项目类型…

    2022年6月16日
    163
  • java 封装

    java 封装1.封装简介概念将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的访问和操作。好处a.只能通过规定的方法访问数据。b.隐藏类的实例细节,方便修改和实现。为啥要对java的类进行封装?个人认为当做一个项目的时候里面的类很多,打个比方一个大公司部门很多,老板不是每个员工都认识,但是“各部门

    2022年7月8日
    19
  • ubuntu 20.04 安装中文输入法_如何在ubuntu中安装中文输入法

    ubuntu 20.04 安装中文输入法_如何在ubuntu中安装中文输入法在Ubuntu系统中,无论是写文档还是在程序中写注释,都经常需要用到中文输入法。本文简单介绍了三种输入法框架,然后详细介绍了在Ubuntu20.04系统中,IBus框架和Fcitx框架支持的中文输入法的配置和安装。……

    2022年9月26日
    0
  • unittest测试框架搭建_开源自动化测试框架

    unittest测试框架搭建_开源自动化测试框架本文采用unittest测试框架搭建一个简单的自动化测试实例,完成readmine网站的登录和新建项目用例,并生成测试报告。test_login文件importunittestfromseleniumimportwebdriverclassTestStorm(unittest.TestCase):defsetUp(self):self.driver=webdriver.Chrome()self.driver.get(“http://d

    2022年8月31日
    0
  • python 之 函数

    什么是函数引言现在有这么个情况:假设我们python中的len方法不可以使用了,而恰好你又要计算一个字符串的长度你该怎么办呢?有人说:‘简单,可以使用for循环嘛s1="hello

    2022年3月29日
    39
  • 黑客养成秘籍_名媛修炼手册

    黑客养成秘籍_名媛修炼手册第一节、黑客的种类和行为以我的理解,“黑客”大体上应该分为“正”、“邪”两类,正派黑客依靠自己掌握的知识帮助系统管理员找出系统中的漏洞并加以完善,而邪派黑客则是通过各种黑客技能对系统进行攻击、入侵或者做其他一些有害于网络的事情,因为邪派黑客所从事的事情违背了《黑客守则》,所以他们真正的名字叫“骇客”(Cracker)而非“黑客”(Hacker),也就是我们平时经常听说的“黑客”(Cacker

    2022年9月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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