vue 学习五 深入了解components(父子组件之间的传值)

上一章记录了 如何在父组件中向子组件传值,但在实际应用中,往往子组件也要向父组件中传递数据,那么此时我们应该怎么办呢

1.在父组件内使用v-on监听子组件事件,并在子组件中使用$emit传递数据

//父组件
<template>
  <div id="home">
    <com test=‘12345‘ test2=‘1213232111111‘ @a_even="a_even"></com> //使用v-on监听子组件事件 @为v-on缩写
  </div>
</template>

<script>
import com from "../components/a_component";
export default {
  name: "home",
  components: {
   com
  },
  methods: {
    a_even(e){
      console.log(‘even‘,e) //e的值,就为子组件内,a_even事件的事件参数
    }
  }
};
</script>
//子组件
<template>
  <div class="a_component-wrap">
    <h1>
      {{a1}}
    </h1>
    <input v-model="a1"/>
  </div>
</template>

<script>
export default {
  name: "AComponent",
  data(){
    return{
      a1:‘123‘
    }
  },
  watch:{
    a1(){   //当a1的值改变时 触发a_even自定义事件,并将this.al作为事件参数
      let vm=this;
      vm.$emit(‘a_even‘,vm.a1)
    }
  }
};
</script>

2.在vue中,凡是在methods中定义的方法的this,都指向当前组件实例,可以利用这个特性,在props中传递一个带参的方法

//父组件
<template>
  <div id="home">
    <com :base_f="base_f"></com> //讲base_f当作props参数传递至子组件
  </div>
</template>

<script>
import com from "../components/a_component";
export default {
  name: "home",
  components: {
   com
  },
  methods: {
    base_f(option){//在methods中定义的方法,不管在哪里调用this的指向,都是定义时的实列,这是因为在methods中定义方法时,会对方法使用js的 bind()感兴趣的同学可以自行搜索,再次就不多说
      console.log(option) //打印的是子组件调用base_f传入的参数      console.log(this) // 打印的是当前父组件的实例
    }
  }
};
</script>
<template>
  <div class="a_component-wrap">
    <h1>
      {{a1}}
    </h1>
    <input v-model="a1"/>
  </div>
</template>

<script>
export default {
  name: "AComponent",
  props:{
    base_f:{
      type:Function,//定义接收的props
    }
  },
  data(){
    return{
      a1:""
    }
  },
  watch:{
    a1(){
      let vm=this;
      this.base_f(vm.a1);//在子组件中使用传递过来的base_f方法,并传入子组件中的参数a1
    }
  }
};
</script>

这中方法涉及到js中的闭包,和this指向,了解其中原因,对在js中涉入不深的童鞋颇有收益。但通常实际使用还是推荐第一种方法,值得一提的是。如果在这种传值方法内,你在base_f中改变父组件的状态,是不会引起vue的报错的

3兄弟组件之间的传值

其是兄弟组件之间的传值,其是通过组合以上方法也可实现,先由子组件a传值个父组件,再由父组件传值给b组件。

不过这样未免太过麻烦,所有这个时候,如果能够有一个管理共用状态的loader就是非常必要了,没错这就是vuex

原文地址:https://www.cnblogs.com/wrhbk/p/11668946.html

时间: 2024-10-29 19:11:43

vue 学习五 深入了解components(父子组件之间的传值)的相关文章

vue.js学习笔记(4)— 父子组件之间通信的第一种方式 props 和 $emit

我们知道,vue组件中,父组件把数组传递给子组件的话,通常是使用props传递,而vue规定,prop是只能单向下行传递的,那么子组件要怎么才能实现数据的向上传递呢,这里引述一个概念:"父子组件的关系:prop向下传递,事件向上传递",上一篇文章当中,关于数据向上传递用到的事件方法 $emit() 也进行了详细的说明,不懂的童鞋可以翻回去看一下.下面就是今天要说的父子组件相互通信的问题,点击效果依次如下: 代码如下: <!DOCTYPE html> <html>

vue父子组件之间的传值

引入组件 父组件 <div> <form-edit></form-edit> </div> import FormEdit from "路径" //引入 export default { name: "HelloWorld", components:{ FormEdit }, data(){ return{ } } } 子组件 <template> <div>{{ change}}</di

Vue之父子组件之间的传值

父组件,首先要挂载子组件 如果父组件传值给子组件,则 <transition mode="out-in"> <router-view  :applyList='applyList'  applyPath='flightBstrip'></router-view> </transition> 1.父组件挂载子组件的时候声明属性 applyList,applyPath.(applyList是变量,flightBstrip是字符串) 2.子组件

vue 组件之间的传值

组件之间的传值有三种  1,父组件给子组件传值 ,   2,子组件给父组件传值   3, 非父子组件之间的传值(又叫兄弟组件传值) 1.父组件给子组件传值   (父组件给子组件传值需要通过props) 首先我的页面结构是这样的  child是子组件   father是父组件, 在这里我新建一个父组件  father.vue <template> <div> <div>这是父组件</div> <!-- 使用组件child --> <child

Vue组件之间的传值方法

在vue当中有两种组件之间的传值方法,分别是 * 父子组件* 之间的传值和* 非父子组件 *之间的传值方法 父子组件之间的传值方法 父子组件之间的传值分为两种 * 父组件给子组件传值 子组件给父组件之间的传值 父组件给子组件传值方法 // 父 <div id = "app"> <my-content></my-content> </div> // 子 <template id="content"> <

vue中组件之间的传值

按照对象分类: 一.父子组件之间的传值 1.使用props和$emit 2.在引入的子组件中使用ref,通过this.$refs.xxx.方法/值来获取子组件中的方法或者值 3.子组件中使用this.$parent来获取父组件中的值或者方法 4.父组件中使用this.$children来获取子组件中的值或者方法 二.兄弟组件中的传值 1.使用eventBus作为中间件,然后使用$emit去抛出事件,使用$on去监听事件 这里要注意一些事项:a.bus.$emit在beforeDestroy中去触

vue之父子组件之间的通信方式

(一)props与$emit <!-这部分是一个关于父子组件之间参数传递的例子--> <!--父组件传递参数到子组件是props,子组件传递参数到父组件是用事件触发$emit--> <!OCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <sccipt src="js/vue.js" t

【转】vue父子组件之间的通信

vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不同情况下又各有不同.最常见的就是父组件为控制组件子组件为视图组件.父组件传递数据给子组件使用,遇到业务逻辑操作时子组件触发父组件的自定义事件.无论哪种组织方式父子组件的通信方式都是大同小异. 父组件到子组件通讯 父组件到子组件的通讯主要为:子组件接受使用父组件的数据,这里的数据包括属性和方法(String,Number,Boolean,Object, Array ,Function).v

Vue组件~父子组件之间的通信(传值)

1.父组件向子组件传参 父组件中通过v-bind对要传参数的绑定:(例如) :dataSourceName:是在子组件中要用到的值 "ctpSaveEchartSetting.dataSourceId":是在父组件中要传的值 子组件中的接收通过props(数据值单项绑定的)进行接收:(例如) 注:在props中有的变量就不能再data中再定义,或通过监测.计算属性直接去改变,因为js中的对象和数组是引用对象,指向同一个内存空间,如果在子组件中改变props中的值会影响到父组件中的值的状