• 注册
当前位置:1313e > vue >正文

vue 组件之间的传参

  • 父组件可以改变子组件的值,而子组件不能直接改变父组件的值!!

1.父组件->子组件 (用props)

父组件 html部分
    <div class="component-study"><h1 style="margin-bottom: 30px">component-studyh1><test-one :one="oneValue">test-one><test-two :two="twoValue">test-two>div>
复制代码
父组件 js部分
    import testOne from "../template/test-1.vue"//引入子组件oneimport testTwo from "../template/test-2.vue"//引入子组件twoexport default {name: 'component-study',data(){return {oneValue:'one',//传到组件one的值twoValue:'two'//传到组件two的值}},components:{"test-one":testOne,"test-two":testTwo}}
复制代码
子组件 html部分
<template><div class="test-1"><div class="title">组件1获取父组件的值:div><div>{{one}}div>div>
template>
复制代码
子组件 js部分
export default {name: '',props:['one'],//子组件用props接收到了父组件one参数data(){return {}},created(){console.log(this.one);//one  这就是父组件传的值}}
复制代码

2.子组件->父组件 (用emit)

个人认为:子组件先声明一个方法,然后传值到父组件,父组件然后利用这个方法来获取这个值
子组件 js部分
export default {name: '',props:['one'],data(){return {sendData:'one',}},created(){this.$emit('getOneDataName',this.sendData);//利用$emit来传值,getOneDataName是方法名,this.sendData是传的值}}
复制代码
父组件 html部分
    <template><div class="component-study"><h1 style="margin-bottom: 30px">component-studyh1><test-one @getOneDataName="getOneData" :one="oneValue">test-one>div>
template>
复制代码
父组件 js部分
    export default {name: 'component-study',data(){return {oneValue:'one',twoValue:'two'}},components:{"test-one":testOne,"test-two":testTwo},methods:{getOneData(data){//这是子组件声明的方法,这个data就是子组件传过来的值console.log(25,data);//one}},created(){//this.getOneData;}}
复制代码

3.同级组件传值 利用eventBus

3-1 先在src目录下新建一个 eventBus.js (其实就是一个vue对象)
import Vue from 'vue'let eventBus = new Vue()export default eventBus/*export default{eventBus:new Vue()
}*/复制代码
组件A js部分
    import eventBus from '../assets/js/eventBus'//引入刚刚写的组件//利用eventBus $emit注册 一个方法eventBus.$emit('testFn','666');//第一个参数是方法名,第二个参数是值
复制代码
组件B js部分
    import eventBus from '../assets/js/eventBus'//引入刚刚写的组件//利用eventBus $on获取刚刚注册的方法eventBus.$on('testFn',(data)=>{console.log(data)//data的值是666});
复制代码

子组件->父组件 (v-slot)

v-slot 标题3

转载于:https://juejin.im/post/5afd3b546fb9a07acd4df0e9

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

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录