前端vue中父子组件之间的传值(修改值)和事件的相互调用

这篇具有很好参考价值的文章主要介绍了前端vue中父子组件之间的传值(修改值)和事件的相互调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

父组件向子组件传值

子组件修改父组件中的值:

方法1

方法2

子组件调用父组件里的函数

方法1

方法2

父组件调用子组件的函数



父组件向子组件传值

子组件中的 data 属性是用来存储子组件自身的数据,而不是用来接收父组件传递的数据的。父组件向子组件传递数据的常用方式是通过 props

在 Vue.js 中,props 是一个属性,可以用来从父组件传递数据到子组件。子组件可以接受这些数据,并在其模板中使用它们。

//1.声明组件模板对象
    const login = {
        template:'<div><h2>欢迎: {{ name }} 年龄:{{ age }}</h2></div>',
        props:['name','age']
    }
 
//2.注册局部组件
    const app = new Vue({
        el: "#app",
        data: {
            username:"小陈陈",
            age:23
        },
        methods: {},
        components:{
            login //注册组件
        }
    });

//3.使用组件
	 <login :name="username" :age="age"></login>  //使用v-bind形式将数据绑定Vue实例中data属性,日后data属性发生变化,组件内部数据跟着变化

子组件修改父组件中的值:

在Vue中,子组件不能直接改变父组件的数据,因为Vue是单向数据流的。但是可以通过触发父组件的事件并传递数据来实现子组件改变父组件的数据。

方法1

具体步骤如下:

  1. 在父组件中定义一个方法,用于修改需要改变的数据。

  2. 在父组件模板中使用子组件,并为该组件绑定一个自定义事件,当子组件需要修改数据时,就会触发这个事件。

  3. 在子组件中,使用 $emit 方法触发自定义事件,并将需要修改的数据作为参数传递给父组件。

  4. 父组件接收到事件后,调用定义好的方法,修改数据。

示例代码如下:

父组件:

<template>
  <div>
    <p>{{ message }}</p>
    <child-component @change-message="changeMessage"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent'

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  data() {
    return {
      message: ''
    }
  },
  methods: {
    changeMessage(newMessage) {
      this.message = newMessage
    }
  }
}
</script>

子组件:

<template>
  <div>
    <button @click="updateMessage">点击我更新父组件的消息</button>
  </div>
</template>

<script>
export default {
  name: 'ChildComponent',
  methods: {
    updateMessage() {
      this.$emit('change-message', '新的消息')
    }
  }
}
</script>

在子组件中,我们定义了一个 updateMessage 方法,在该方法中调用 $emit 方法触发自定义事件,并将字符串 '新的消息' 作为参数传递给父组件。在父组件中,我们定义了一个 changeMessage 方法,该方法将接收子组件传递过来的参数,并将其赋值给 message 数据,从而改变父组件的数据。

注意,父组件中使用 @change-message="changeMessage" 将自定义事件 change-message 和父组件的 changeMessage 方法绑定起来,这样当子组件触发自定义事件时,就会调用父组件中的方法。

方法2

如果使用 sync 修饰符,可以更简便地实现子组件修改父组件数据的操作。

具体步骤如下:

  1. 在父组件中将需要修改的数据作为属性传递给子组件,并使用 :value.sync 的语法,表示这是一个双向绑定的属性。

  2. 在子组件中,通过修改该属性的值,就能够直接修改父组件的数据。

示例代码如下:

父组件:

<template>
  <div>
    <p>{{ message }}</p>
    <child-component :message.sync="message"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent'

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  data() {
    return {
      message: ''
    }
  }
}
</script>

子组件:

<template>
  <div>
    <button @click="updateMessage">点击我更新父组件的消息</button>
  </div>
</template>

<script>
export default {
  name: 'ChildComponent',
  props: {
    message: String
  },
  methods: {
    updateMessage() {
      this.$emit('update:message', '新的消息')
    }
  }
}
</script>

在父组件中,我们将 message 属性作为参数传递给子组件并使用 :value.sync 的语法来实现双向绑定。子组件中可以直接修改 message 属性的值,从而实现修改父组件数据的效果。在子组件中,我们使用 $emit 方法触发 update:message 事件,并将 '新的消息' 作为参数传递给父组件。

注意,在子组件中修改属性值时,不能直接使用 this.message = '新的消息' 的语法,而是应该使用 $emit('update:message', '新的消息'),因为这样才能够正确地更新父组件中的数据。在父组件中,我们需要监听 update:message 事件,并将其绑定到一个方法上,用于更新父组件中的数据。

子组件调用父组件里的函数

方法1

在 Vue 中,可以通过 props 属性将父组件中的函数传递给子组件。

首先,在父组件中定义一个函数,例如:

methods: {
  handleClick() {
    // do something
  }
}

然后,在父组件中使用子组件时,将该函数作为 props 属性传递给子组件,例如:

<template>
  <child-component :handleClick="handleClick" />
</template>

最后,在子组件中接收传递过来的函数,并在需要的地方调用它,例如:

props: {
  handleClick: Function
},
methods: {
  someMethod() {
    // call the handleClick function from parent component
    this.handleClick();
  }
}

方法2

在Vue中,可以使用$emit方法向父组件派发一个自定义事件,并传递参数。父组件可以在模板中监听这个自定义事件,并定义相应的事件处理函数来响应子组件的操作。

具体的做法是,在子组件中通过this.$emit(event, [...args])方法触发一个自定义事件,并传递需要的参数。父组件可以在模板中监听这个自定义事件,并定义一个相应的方法来处理子组件的操作。

例如:

<!-- 父组件 -->
<template>
  <div>
    <child-component @child-click="handleClick"></child-component> <!-- 监听子组件的自定义事件 -->
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent,
  },
  methods: {
    handleClick() {
      console.log('点击了子组件的按钮');
    }
  }
};
</script>

<!-- 子组件 -->
<template>
  <button @click="handleButtonClick">点击我</button>
</template>

<script>
export default {
  methods: {
    handleButtonClick() {
      this.$emit('child-click'); // 触发自定义事件
    }
  }
};
</script>

在上面的例子中,子组件定义了一个名为handleButtonClick的方法,当按钮被点击时会通过this.$emit('child-click')方法触发一个自定义事件'child-click'。父组件在模板中监听了这个自定义事件,并定义了一个名为handleClick的方法来处理这个事件。当子组件中的按钮被点击时,会触发自定义事件,并调用父组件中的handleClick方法。

父组件调用子组件的函数

在 Vue 中,父组件可以通过 $refs 属性引用子组件,并调用其方法。具体步骤如下:

  1. 在子组件中,给需要调用的函数添加一个 ref 属性,例如 myFunction

  2. 在父组件中,通过 $refs 属性获取子组件实例,然后调用子组件的方法。示例代码如下:

    <template>
      <div>
        <ChildComponent ref="child"></ChildComponent>
        <button @click="callChildMethod">调用子组件方法</button>
      </div>
    </template>
    
    <script>
    import ChildComponent from './ChildComponent.vue';
    
    export default {
      components: {
        ChildComponent
      },
      methods: {
        callChildMethod() {
          this.$refs.child.myFunction();
        }
      }
    }
    </script>
    
  3. 在上面的示例代码中,父组件首先在模板中使用 <ChildComponent> 标签引入了子组件,并设置了一个 ref 属性为 child。然后,在父组件中定义了一个 callChildMethod 方法,该方法通过 this.$refs.child 获取到子组件实例,然后调用了 myFunction 方法。

  4. 注意:只有当子组件已经被挂载到 DOM 中才能使用 $refs。如果尝试在子组件还没有被挂载的时候获取 $refs,则会返回 undefined

    如果觉得组件之间的数据传输过于麻烦复杂的时候,可以学习vuexVuex详解,一文彻底搞懂Vuex_Mr.指尖舞者的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-732437.html

到了这里,关于前端vue中父子组件之间的传值(修改值)和事件的相互调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue父子组件之间传值的方法

    父传子 方式: props 效果: 把父组件的 fatherName 属性传入子组件,在子组件中使用 父组件代码: 子组件代码: 子传父 方式: $emit 效果: 在子组件触发事件,修改父组件的fatherName属性 父组件代码: 子组件代码: 兄弟传值 方式: eventBus.js 效果: 任意组件之间相互传值 代

    2024年02月09日
    浏览(46)
  • vue组件之间的五种传值方法(父子\兄弟\跨组件)

    父传子 (自定义属性 props) 父组件向子组件传参,通过自定义属性的方式进行传参,在子组件中使用prop定义自定义的属性,然后在父组件中通过v-bind指令把需要传递的数据绑定在子组件上,那在子组件中props里面的自定义属性可以直接使用。 子传父 (自定义事件 this.$emit) 子组

    2023年04月08日
    浏览(79)
  • 【微信小程序】父子组件之间传值

    1. 父组件向子组件 传值 2. 子组件向父组件 传值 父向子传值使用的是 属性绑定 ,子组件中的 properties 对象进行接收父组件传递过来的值。 子向父传值使用的是 自定义事件 ,父组件通过自定义事件中的 事件对象e 来接收子组件传递过来的值。 1.1 在父组件的.json文件中导入子

    2024年02月16日
    浏览(48)
  • Web前端 ---- 【Vue】(组件)父子组件之间的通信一文带你了解

    目录 前言 父组件传子组件 ---- props 给要传递数据的子组件绑定要传过去的属性及属性值 在子组件中使用props配置项接收 props配置项 子组件传父组件 ---- 组件的自定义事件 子组件向父组件传递数据 通过代码来绑定自定义事件 本文将介绍在Vue中父子组件如何进行通信 这里先介

    2024年02月05日
    浏览(117)
  • Web前端 ---- 【vue】vue 组件传值(props、全局事件总线、消息的订阅与发布)

    目录 前言 父子组件 父传子 子传父 全局事件总线 什么叫全局事件总线 如何创建全局事件总线 如何在组件上获取到这个全局vc对象 最常用的创建全局事件总线 兄弟组件 消息订阅与发布 安装 使用 爷孙组件 在上篇文章我们介绍了父子组件之间的传值通信,本文将介绍不仅限

    2024年02月05日
    浏览(47)
  • react自定义组件间的传值,if..else..判断,for循环(嵌套map使用),点击事件(Onclick),页面上事件实事传递参数(基础版)

    9.自定义组件间的传值 10.if..else..判断 11.for循环(嵌套map使用) 12.点击事件(Onclick) 13.页面上事件实事传递参数 14.关于export default function App()与export function App()的区别    export default不需要{}      import  Gallery from \\\'./Gallery.js\\\';    export function需要{}       import {Gallery} from \\\'./Galler

    2024年01月17日
    浏览(43)
  • vue3 父子组件传值 记录

    最近这个组件之间传值用的较多,我这该死的记性,总给忘记写法,特此记录下 补充:LeftView.vue 是父组件; Video.vue 是子组件 Video.vue 子组件 LeftView.vue 父组件 第一步 创建bus.js文件 第二步 分别在需要相互传参的组件中引入bus.js文件,并相互传参

    2024年02月11日
    浏览(44)
  • vue父子组件传值不能实时更新

    最近做项目,遇到个大坑,这会爬出来了,写个总结,避免下次掉坑。 vue父子组件传值不能实时更新问题,父组件将值传给了子组件,但子组件显示的值还是原来的初始值,并没有实时更新,为什么会出现这种问题呢? 出现这个问题,可能有以下两个原因: 一、 父组件没有

    2024年02月16日
    浏览(53)
  • Vue3 TS写法 父子组件传值(通讯)

    父组件: 子组件: 通过defineProps来接受数据(无须引入直接使用即可) 子组件可写默认值也可以不写两种情况 子组件通过defineEmits派发一个事件 (一样无须引入直接使用即可)  父组件接受子组件的事件 chilFun

    2024年02月15日
    浏览(40)
  • vue父子组件传值(v-model)

    子组件使用 props 接收父组件传来的值 1)这里有个大坑, el-dialog 中一定要用 model-value 来代替 v-model ,不能用 v-model ,否则会报错 (2)子组件中修改父组件传入的参数 visible 时,使用 👇方式

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包