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

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

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

  1. vue中父子组件之间的传值、非父子组件之间的传值

    在Vue实例中每个组件之间都是相互独立的,都有自己的作用域,所以组件之间是不能直接获取数据.在项目开发中一个组件可能需要获取另一个组件的值,我们可以通过其他方法间接的获取.所以,获取的方法有以下几种: ...

  2. vue项目中的父子组件之间的传值。

    首先说一下父子组件就是在一个vue文件中引入另一个vue文件,被引入vue文件就是子组件,引入vue文件的vue文件就是父组件.而在父组件中是不能直接调用子组件中的变量值的.下面详细说一下,父子组件之 ...

  3. vue 非父子组件之间的传值(Bus/总线/发布订阅模式/观察者模式)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 浅谈vue父子组件之间的传值

    前言:本章主要说下父子组件的传值,为商品列表组件之间的传值做一个基础预热.Github:https://github.com/Ewall1106/mall(请选择分支chapter23) 1.父组件向 ...

  5. VUE 父子组件之间通信传值 props和 $emit

    1.父组件传值给子组件 $props,子组件传值给父组件 $emit 父组件          <div id="app" >               <tr ...

  6. vue--非父子组件之间的传值

    一个项目都有一个根组件 App.vue 一个根组件下面可能会有多个自组件,例如:Hello.vue 和 Header.vue Hello.vue 和 Header.vue 就是兄弟组件,那么这两个兄弟 ...

  7. 「Vue」父子组件之间的传值及调用方法

    a.父组件向子组件传值data(){},props数据区别data中的数据可读可写,是自己的数据props是个数组,中的数据是父组件传递过来的,只读不能写<login :dmsg='msg'&g ...

  8. vue父子组件之间相互传值

    1. 子组件使用父组件方法,并向父组件传值 子组件代码 <template> <div class="menu"> <div class=" ...

  9. vue父子组件之间的传值

    引入组件 父组件 <div> <form-edit></form-edit> </div> import FormEdit from "路径& ...

随机推荐

  1. element ui step组件在另一侧加时间轴显示

    这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...

  2. Sql批量修改语句

    修改某个数字类型字段 SET @num = 10000000000001; #定义初始化变量参数 UPDATE ckys_me #更新的表 SET openid = (@num := @num+1) ...

  3. dubbo-源码阅读之容器启动

    dubbo Main 例子 public class Start { public static void main(String[] args) throws Exception { com.ali ...

  4. 使用ReadStream方法延时读取文件

    const fs = require('fs'); let file = fs.createReadStream("filenpath.js"); file.pause(); fi ...

  5. js取整 - 优雅版(装逼必备)

    var a = 2.98; var z1 = ~~a; var z2 = a | 0; var z3 = a>>0; console.log(z1, z2, z3);     // 2, ...

  6. leetcode-164周赛-1266-访问所有点的最小时间

    题目描述: 自己的解: class Solution: def minTimeToVisitAllPoints(self, points: List[List[int]]) -> int: re ...

  7. table响应式设计

    table不可用flex布局和td宽度的自适应. table外层加div.mml-table设置overflow-x:auto可以添加横向滚动条.

  8. 【原理】RabbitMQ架构图

    Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输, Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列. Queue:消息 ...

  9. 在C#.NET中,如何生成PDF文件?主要有以下几个途径

    1.使用.NET文件流技术:若通过.NET的文件流技术生成PDF文件,必须对PDF文件的语法很清楚,例如BT表示实体内容开始:ET表示实体内容结束:TD表示换行等等.我们可以从Adobe的官方网站上下 ...

  10. Jquery轻量级插件--操作URL

    调用: > "?action=view&section=info&id=123&debug&testy[]=true&testy[]=false ...