大概梳理下传值的几种方式

一:父子组件传值

  1. props方式

子组件对外暴露方法并向父组件传递由于触发方法导致的值的变化,父组件接收子组件传递来的值;子组件接收父组件传递来的值,并根据传递来的值在子组件内部进行各种操作

弊端:子组件只能接受值,父组件无法获取子组件的方法和属性

仅适合传入数据

  1. $parents与$children方式

可操作父组件或子组件方法及属性,但不推荐

 1. $parent : 当前组件树的根实例,如果没有则是该组件树本身

用于子组件获取父组件实例并操作父组件属性和方法;

高组件化开发环境下不建议使用,高耦合度,不易复用;

 2. $children:当前实例的 **直属** 子组件集合

以数组方式存在,数组内子组件成员可能会因为增减组件导致下标发生偏移;

不保证顺序,非响应式,仅可拿到子组件下标;

若有需要,推荐使用for...of遍历子组件实例;

在需要拿到所有子组件时才用到,日常不建议使用

  1. $refs与ref方式

用于调用子组件的属性和方法,默认空对象;

最常用;

应该在父组件内给子组件本身添加ref

this.$refs的意义:该vue实例下的有ref标识的子组件的合集,可以直接通过this.$refs.ref.data/methods来调用子组件数据或方法;

为确保子组件完全挂载完毕,应在mounted生命周期内或者使用this.$nextTick()回调来操作子组件的方法或属性;

语法: this.$refs.ref

二:非父子组件传值

  1. $root: 访问VUE根组件

略略略

  1. $emit 与 $on

该方法可以直接实现两个页面间传值,而不拘泥于是否是父子关系

该方式需要新建一个js文件作为载体, 由该文件对象负责传递数据;

// 公共文件 pub.js
import Vue from 'vue'
let pub = new Vue()
export default pub
//至此,公共文件创建完毕

假设页面a发送数据,页面b接收数据:

页面a,页面b均需要导入文件pub.js

//页面a

import Pub from '../utils/public.js'
export default {
data(){
pageA:'我是页面a的数据'
},
methods:{
emitPub(){
Pub.$emit('goThere',pageA)
}
}
}

//页面b

import Pub from '../utils/public.js'
export default {
data(){
pageB:''
},
mounted(){
//需要在组件加载完毕后使用
//res: 页面a发射的数据
Pub.$on('goThere',res=>{
this.pageB = res
})
}
}

tips: 经试验,$on的参数二如果是普通函数,this指向会发生错误,因而推荐使用箭头函数(这是由于箭头函数下的this继承了所处函数的上下文环境,妙蛙)

以上

vue父子传值与非父子传值的更多相关文章

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

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

  2. vue传值(父子传值,非父子传值)

    vue组件传值,分为父子传值和非父子传值,父子传值又分为父传子和子传父. 组件之间的传值,实现了数据的联动,是从操作Dom到操作数据一个跳转性的突破,在学习vue双向绑定原理之后, 这种观念就应该继续 ...

  3. vue中父子间传值和非父子间传值

    vue传值一般分三种方式:父组件向子组件传值.子组件向父子间传值.非父子组件进行传值 一.父组件向子组件传值:父组件引用子组件后,通过数据绑定(v-bind)向子组件传值 父组件: <templ ...

  4. vue bus方式解决非父子组件间的传值

    对于非父子组件之间的传值 通常使用VUEX 和总线等方式解决 这里我聊聊发布订阅模式(总线) <body> <div class="app"> <ch ...

  5. Vue组件通信之非父子组件传值

    前言: 如果想要了解非父子关系的组件传值,最好是在了解父传子和子传父的基础上在来了解非父子传值可能会有更透彻的思路. 因为非父子传值是通过定义事件总线来代理实现父传子+子传父从而实现的传值方式. 这是 ...

  6. 简述在Vue脚手架中,组件以及父子组件(非父子组件)之间的传值

    1.组件的定义 组成: template:包裹HTML模板片段(反映了数据与最终呈现给用户视图之间的映射关系) 只支持单个template标签: 支持lang配置多种模板语法: script:配置Vu ...

  7. React 父子组件和非父子组件传值

      零.this.props     可以接收到 外界的传值 和 此组件标签内部自定义的方法       例:         <one vals={message} sendVal={this ...

  8. vue父子组件及非父子组件通信

    1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...

  9. Vue父子组件及非父子组件如何通信

    1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: 子组件通过props来接收数据: 方式1: 方式2 : 方式3: 这样呢,就实现了父组件向子组件传递数 ...

随机推荐

  1. C#设计模式之12-代理模式

    代理模式(Proxy Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/411 访问. 代理模式属于结构型 ...

  2. C#LeetCode刷题之#598-范围求和 II​​​​​​​(Range Addition II)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3881 访问. 给定一个初始元素全部为 0,大小为 m*n 的矩阵 ...

  3. Python参数解析工具ArgumentParser

    通过命令行运行Python脚本时,可以通过ArgumentParser来高效地接受并解析命令行参数. 流程 新建一个ArgumentParser类对象,然后来添加若干个参数选项,最后通过parse_a ...

  4. QT下载速度慢的解决方法

    在官网的下载速度实在太慢了 找到了一个镜像网站 https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/

  5. java.io.IOException: Stream closed 的问题

    public static String getBodyString(ServletRequest request) { StringBuilder sb = new StringBuilder(); ...

  6. StructuredStreaming简单的例子(NewAPI)

    StructuredStreaming简单的例子(NewAPI)(wordCount) package com.briup.streaming.structed import org.apache.l ...

  7. golang slice 简单排序

    原文链接:https://www.jianshu.com/p/603be4962a62 demo package main import ( "fmt" "sort&qu ...

  8. 2020.5.26 第六篇 Scrum冲刺博客

    Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...

  9. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  10. JS - 日期时间比较函数

    JS日期比较(yyyy-mm-dd) function duibi(a, b) { var arr = a.split("-"); var starttime = new Date ...