(一) popsDowm

  三种方法获取父组件数据:被动获得(1);主动获取(2)。

  1.被动获得:

    父组件:v-bind: 绑定变量参数和方法参数;子组件:props 接收参数。可以在模板中直接使用也可以 this.参数 获得

v-bind:name="yourName"
props:['name']

template: {{name}}

js: this.name

v-bind:fatherMeth="regMeth"
props:{fatherMeth: Function} js: this.fatherMeth()
 

  2.主动获取:

    ①this.$parent.变量和方法

       this.$parent.yourName;this.$parent.fatherTest().

        如果获取不到,在父组件将 this 传递给子组件::father="this"

       this.father.youerName;this.father.fatherTest().

    ② 发送 emit 事件

         this.$emit('fatherOnEmite',this.childVariate)

(二) eventUp:

  两种方法: 在父组件设置 ref 属性;监听 emit (订阅)。

  父组件:ref="child1"

    this.$refs.child1.desc;this.$refs.child1.childTest()

  父组件:v-on:fatherOnEmite="onEmite"

  注意:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。updated 不能保证全部组件都加载用 this.nextTick

代码github:https://github.com/dopocheng/alone-part

父组件

<template>
<div>
propsParent!!!<br /><br />
<!-- prop 静态赋值 -->
<!-- prop 变量动态赋值 yourName、obj-->
<Compon
title="my journey with vue"
v-bind:name="yourName"
v-bind:student="obj"
v-bind:fatherMeth="regMeth"
:father="this"
v-on:fatherOnEmite="onEmite"
ref="child1"
/><br />
<p @click="updated_data_counter">{{updated_data}} 点击 使用 this.$refs 获取子组件数据</p>
</div>
</template> <script>
import Compon from '../../complex-component/components'
export default {
components: { Compon },
data() {
return {
yourName: "dpc",
obj: {
id: "007AB",
age: 18
},
updated_data: 0
}
},
created() {
},
updated() {// 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。updated 不能保证全部组件都加载用 this.nextTick
this.fatherCall()
},
methods: {
fatherTest() {
console.log("父组件方法")
},
fatherCall() {
// 因为 ref 本身是作为渲染结果被创建的,在初始渲染的时候你不能访问它们 - 它们还不存在!$refs 也不是响应式的,因此你不应该试图用它在模板中做数据绑定
// 1.等待页面渲染完成后再去获取子组件变量和方法
console.log("***********父组件主动获取***********")
this.$nextTick(() => {console.log("this.$nextTick 最后调用",this.$refs.child1.desc)})
this.$nextTick(() => {console.log("this.$nextTick 最后调用"); this.$refs.child1.childTest()})// console.log 无法打印方法
console.log("***********父组件主动获取 end***********")
},
onEmite(arg) {
// 2. 获取子组件数据
console.log("父组件注册(订阅) v-on 方法", arg);
},
regMeth() {
console.log("父组件方法直接传入组件");
},
updated_data_counter() {
this.updated_data++
}
}
}
</script>

  子组件:

<template>
<div>
complex-component components!!!<br /><br />
<p>{{title}}</p>
<p>{{name}}</p>
<p>{{student}}</p>
</div>
</template>
<script>
export default {
// props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
// 注意那些 prop 会在一个组件实例创建之前进行验证,所以实例的属性 (如 data、computed 等) 在 default 或 validator 函数中是不可用的。
props:{// 一: 被动获得父组件的参数 (v-bind 参数)
title: {type:String, default:"title", required: true},
name: {
type: String,
validator: function (value) {
// 这个值必须匹配下列字符串中的一个,否则控制台有警告
return ['dpc', 'warning', 'danger'].indexOf(value) !== -1
}
},
student: {type:Object,
default: function () {
return { message: 'not student' }
}},
fatherMeth: Function,
father: Object },
data() {
return {
childVariate: "在子组件调用父组件的oo!!!" ,
desc: "父组件调用子组件属性!!!",
}
},
created() {
this.passiveGain()
this.activeAcquirement()
},
methods: {
childTest() {
console.log("父组件调用子组件方法!!!")
},
passiveGain() {
console.log("***********child passive gain***********")
//一:被动获得父组件值(通过 v-bind:参数)和方法
console.log(this.title);
this.fatherMeth()
console.log("***********child passive gain end***********")
},
activeAcquirement() {
console.log("***********child active acquirement***********")
// 二.主动获取父组件变量值或方法
console.log("主动获取父组件变量值或方法",this.$parent.yourName)
this.$parent.fatherTest()
// 1.如果获取不到,就把父组件对象 this 传递给子组件,在子组件接收下 this.father (定义的参数).变量
console.log("父组件对象 this 传递给子组件",this.father.yourName)
this.father.fatherTest() // 2.子组件使用 $emit 触发父组件事件
this.$emit('fatherOnEmite',this.childVariate)
console.log("***********child active acquirement end***********")
}
}
}
</script>

子组件获取父组件数据 propsDown, 父组件获取子组件数据 eventUp的更多相关文章

  1. 微信小程序将外部数据从父组件中传入到子组件

    小程序组件开发遇到一个组件内嵌两个组件,而这两个子组件所使用的数据来自于同一个API,如下图所示. 如果这时候两个子组件各自导入同一个接口就会显得多余.另外的办法是由父组件导入接口数据,再从父组件将接 ...

  2. vue 子组件传递数据跟父组件

    子组件 <body> <div v-on:click="test"></div> <script> export default { ...

  3. vue $emit $on 从子组件传递数据给父组件

    原理是: 子组件使用$emit发送数据,父组件使用$on,或者v-on绑定, 来监听子组件发送的数据. 子组件: <button @click="sendChildData" ...

  4. Vue子组件传递数据给父组件

    子组件通过this.$emit(event,data)传递数据到父组件 以下是例子: father.vue 父组件 <template> <div> <child @ne ...

  5. Vue中子组件数据跟着父组件改变和父组件数据跟着子组件改变的方法

    一,子组件数据跟着父组件改变 父组件的代码 <template> <div class="home"> <img alt="Vue logo ...

  6. vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)

    看了很多文章,官网文档也有看,对父子组件通信说的不是很明白:决定自己总结一下: vue一般都使用构建工具构建项目:这样每个组件都是单文件组件:而网上很多文章都是script标签方式映入vue,组件通信 ...

  7. vue子组件数据跟着父组件改变

    父组件的代码 <template> <div class="home"> <img alt="Vue logo" src=&quo ...

  8. vuejs利用props,子组件修改父组件的数据,父组件修改子组件的的数据,数据类型为数组

    博文参考 传送们点一点 父组件: <template> <div> <aa class="abc" v-model="test" ...

  9. vue之provide和inject跨组件传递属性值失败(父组件向子组件传值的两种方式)

    简单介绍:当一个子组件需要用到父组件的父组件的某些参数.那么这个时候为了避免组件重复传参,使用vue的依赖注入是个不错的方法,直接在最外层组件设置一个provide,内部不管多少嵌套都可以直接取到最外 ...

随机推荐

  1. scrapy在存储数据到json文件中时,中文变成为\u开头的字符串的处理方法

    在settings.py文件中添加 FEED_EXPORT_ENCODING = 'utf-8'

  2. 关于<Java 中 RMI、JNDI、LDAP、JRMP、JMX、JMS那些事儿(上)>看后的一些总结-1

    原文地址:https://www.anquanke.com/post/id/194384#h3-3 1.java rmi 关于rmi客户端和服务端通信的过程,java的方法都实现在rmi服务端,客户端 ...

  3. 我的第一个 Kaggle 比赛学习 - Titanic

    背景 Titanic: Machine Learning from Disaster - Kaggle 2 年前就被推荐照着这个比赛做一下,结果我打开这个页面便蒙了,完全不知道该如何下手. 两年后,再 ...

  4. RabbitMQ入门(三)订阅模式

      在之前的文章RabbitMQ入门(二)工作队列中,我们创建了一个工作队列.工作队列背后的假设是每一项任务都被准确地传送至一个worker.在本文中,我们将会做一些不同的事情--我们将会把一个消息发 ...

  5. 管理2000+Docker镜像,Kolla是如何做到的

    根据 DockerHub 上的数据,整个 Kolla 项目管理的 镜像有 2000 多个,这么多的镜像,是怎么定义,又是如何构建的呢? 简介 我们一直在说的 Kolla,通常情况下泛指,包括了 Kol ...

  6. springboot集成quartz实现任务调度

    quartz 概述 特点 强大的调度功能 灵活的应用方式 分布式和集群能力 用到的设计模式 Builder 模式 factory模式 组件模式 链式写法 体系结构 调度器 任务 触发器 架构图 spr ...

  7. netty EventLoop线程与当前线程的问题

    模拟客户端向服务端发送消息: 客户端部分代码如下,当连接激活触发消息发送,采用线程池的形式,分多个线程向服务端发送同一消息 @Override public void channelActive(Ch ...

  8. 迭代器中set的使用

    今天对迭代器中的set方法进行了一下简单的使用,由于之前使用过list方法,所以将他与list进行了一下对比. list中加入对象时不会进行查重,也就是只要是一个符合的对象就可以加到list中,而对于 ...

  9. jenkins集成gitlab

     一.配置jenkins 1.安装Gitlab Hook Plugin )生成随机token 在系统中生成 openssl rand -hex 0f2a47c861133916d2e299e3 )创建 ...

  10. 第三次作业:使用Packet Tracer分析TCP连接的建立与释放过程

    0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 使用路由器连接不同的网络 使用命令行操作路由器 通过抓取HTTP报文,分析TCP连接建立的过程 2 实验内容 使用Packe ...