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

一:父子组件传值

  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. 2020-07-20:你觉得redis有什么缺点,给你改进的话你会怎么改进?

    福哥答案2020-07-20: 1.由于 Redis 是内存数据库,短时间内大量增加数据,可能导致内存不够用.2.redis是单线程的,单台服务器无法充分利用多核服务器的CPU.3.遇到大量查询时容易 ...

  2. Umlet和draw.io 使用心得

    文章目录 软件使用心得 1. Umlet 画图软件 1.1 前言 1.2 优点 1.3使用小trick 1.3.1 灵活改变箭头形式 1.3.2 整体复制 1.3.3 快速复制 2. draw.io ...

  3. day11面向对象 多态 静态方法 (三)

    多继承 class 类名(父类1,父类2)  ----- 默认使用第一个父类   重写父类方法 方法名和父类方法名一样 当父类和子类的方法名重名时,默认使用的是子类中的方法     调用被重写的父类的 ...

  4. Pytorch_第十篇_卷积神经网络(CNN)概述

    卷积神经网络(CNN)概述 Introduce 卷积神经网络(convolutional neural networks),简称CNN.卷积神经网络相比于人工神经网络而言更适合于图像识别.语音识别等任 ...

  5. JDBC | 第一章: 快速开始使用JDBC连接Mysql数据库?

    开始使用基于java的JDBC技术来连接mysql进行msyql数据库简单的CRUD操作 下载对应mysql驱动包 这里我创建maven项目基于maven下载 <!--mysql 驱动--> ...

  6. SEGGER studio问题

    刚开始学习用SEGGER studio编译调试nordic 52840程序,在此记录遇到的问题. 1.  Additional Load File[0]:"E:\nordic/nRF5_SD ...

  7. Flutter FlatButton 按钮基本各种用法

    Flutter中给我们预先定义好了一些按钮控件给我们用,常用的按钮如下 RaisedButton :凸起的按钮,其实就是Android中的Material Design风格的Button ,继承自Ma ...

  8. 新建一个Vue项目

    node环境以及vue的安装可查看:https://www.cnblogs.com/renlywen/p/13522869.html 第一步:创建项目 终端输入: vue init webpack d ...

  9. kali安装open-vm-tools实现虚拟机交互

    普通的VMware tools 弱爆了 安装具有复制粘贴功能的open-vm-tools.servic: 切记:如果之前已经安装了VMware tools,一定要删除:vmware-uninstall ...

  10. JS继承 小白文

    继承我的理解是 一个对象 能够使用另一个对象的方法和属性 继承需要一个父类构造函数 一.通过原型链继承 通过 创建一个 Person 的实例对象,该对象身上 不仅有 name 和 age 等方法, 也 ...