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

一:父子组件传值

  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#LeetCode刷题之#190-颠倒二进制位(Reverse Bits)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4050 访问. 颠倒给定的 32 位无符号整数的二进制位. 输入: ...

  2. Flutter 容器Container类和布局Layout类

    1.布局和容器 [布局]是把[容器]按照不同的方式排列起来. Scaffold包含的主要部门:appBar,body,bottomNavigator 其中body可以是一个布局组件,也可以是一个容器组 ...

  3. flask_restful 的reqparse获取验证前端参数

    required是设置必选非必选,nullable允不允许向传null,location指定参数获取的位置,可以多选,按前后顺序获取 parser.add_argument('app_id', typ ...

  4. CPF 入门教程 - 数据绑定和命令绑定(二)

    CPF netcore跨平台UI框架 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) 数据绑定和Wpf类似,支持双向绑定.数据绑定和命令绑定是UI和业务逻辑分离的基础 ...

  5. (转载)sqlserver2008”备份集中的数据库备份与现有的XX数据库不同”解决办法

    原文链接:https://www.cnblogs.com/huangfr/archive/2012/08/09/2629687.html 因为是在另一台电脑对同名数据库做的备份,用常规方法还原,提示不 ...

  6. 洛谷 P6218 [USACO06NOV] Round Numbers S

    洛谷 P6218 [USACO06NOV] Round Numbers S 题目描述 如果一个正整数的二进制表示中,\(0\) 的数目不小于 \(1\) 的数目,那么它就被称为「圆数」. 例如,\(9 ...

  7. Kettle基本使用

    Kettle基本使用 Kettle的几个子程序的功能和启动方式 Spoon.bat 图形界面方式启动作业和转换设计器. Pan.bat 命令行方式执行转换. Kitchen.bat   命令行方式执行 ...

  8. MySQL SQL概述

    MySQL SQL概述 数据库的好处: •实现数据持久化 •使用完整的管理系统统一管理易 数据库的概念: DB:数据库(database):存储数据的“仓库”.它保存了一系列有组织的数据. DBMS: ...

  9. Watchtower - 自动更新 Docker 镜像与容器

    git 地址:https://github.com/containrrr/watchtower Docker images docker pull containrrr/watchtower:i386 ...

  10. 图数据库对比:Neo4j vs Nebula Graph vs HugeGraph

    本文系腾讯云安全团队李航宇.邓昶博撰写 图数据库在挖掘黑灰团伙以及建立安全知识图谱等安全领域有着天然的优势.为了能更好的服务业务,选择一款高效并且贴合业务发展的图数据库就变得尤为关键.本文挑选了几款业 ...