1.父组件与子组件传值props

1.1定义父组件,父组件传递 inputText这个数值给子组件:

//父组件
//引入的add-widget组件
//使用 v-bind 的缩写语法通常更简单:
<add-widget :msg-val="msg"> //这里必须要用 - 代替驼峰
// HTML 特性是不区分大小写的。所以,当使用的不是字符串模板,camelCased (驼峰式) 命名的 prop 需要转换为相对应的 kebab-case (短横线隔开式) 命名,当你使用的是字符串模板的时候,则没有这些限制
</add-widget>
data(){
return {
msg: [1,2,3]
};
}

1.2定义子组件,子组件通过 props方法获取父组件传递过来的值。props中可以定义能接收的数据类型,如果不符合会报错。

//子组件通过props来接收数据:
//方式1:
props: ['msgVal']
//方式2 :
props: {
msgVal: Array //这样可以指定传入的类型,如果类型不对,会警告
}
//方式3:
props: {
msgVal: {
type: Array, //指定传入的类型
//type 也可以是一个自定义构造器函数,使用 instanceof 检测。
default: [0,0,0] //这样可以指定默认的值
}
}
//注意 props 会在组件实例创建之前进行校验,所以在 default 或 validator 函数里,诸如 data、computed 或 methods 等实例属性还无法使用

注意:父子组件传值,数据是异步请求,有可能数据渲染时报错

  • 原因:异步请求时,数据还没有获取到但是此时已经渲染节点了
  • 解决方案:可以在父组件需要传递数据的节点加上 v-if = isReady(isReady默认为false),异步请求获取数据后(isReady赋值为true),v-if = isReady

2.子组件向父组件传递数据

子组件通过$emit方法(用来触发事件,详情见官网)传递参数:

子组件:

父组件:

为了方便起见,我们为这种模式提供一个缩写,即 .sync 修饰符,如

<text-document
v-bind:title="doc.title"
v-on:update:title="doc.title = $event"
></text-document>

使用.sync修饰符:

<text-document v-bind:title.sync="doc.title"></text-document>

详情见api:https://cn.vuejs.org/v2/guide/components-custom-events.html#sync-修饰符

3.子组件向子组件传递数据

Vue 没有直接子对子传参的方法,建议将需要传递数据的子组件,都合并为一个组件。如果一定需要子对子传参,可以先从传到父组件,再传到子组件。

或者通过eventBus或vuex(小项目少页面用eventBus,大项目多页面使用 vuex)传值:

3.1通过eventBus(即通过on监听、emit触发的方式)

3.1.1定义一个新的vue实例专门用于传递数据,并导出

3.1.2定义传递的方法名和传输内容,点击事件或钩子函数触发eventBus.emit事件

3.1.3接收传递过来的数据

注意:enentBus是一个另一个新的Vue实例,区分两个this所代表得vue实例

3.2vuex进行传值

详情见:https://baijiahao.baidu.com/s?id=1618794879569468435&wfr=spider&for=pc

4.画面迁移的组件之间传递数据

4.1通过路由带参数进行传值,例:两个组件 A和B,A组件通过query把orderId传递给B组件

A组件传值写法:

this.$router.push({ path: '/conponentsB', query: { orderId: 123 } }) // 跳转到B

B组件取值写法:

this.$route.query.orderId

注意:

  1. Vue-详解设置路由导航的两种方法:声明式的导航  <router-link :to="..."> 和编程式的导航router.push(...)
  2. 其中画面迁移有push和replace两种方式,详情如:https://www.cnblogs.com/vickylinj/p/10880869.html
  3. 传参的方式又分为查询参数query(+path)和命名路由params(+name)两种方式:
  • 命名路由搭配params,刷新页面参数会丢失
  • 查询参数搭配query,刷新页面数据不会丢失
  • 接受参数使用this.$router后面就是搭配路由的名称就能获取到参数的值

详情如:https://blog.csdn.net/crazywoniu/article/details/80942642

4.2通过设置 Session Storage缓存的形式进行传递

两个组件A和B,在A组件中设置缓存orderData

const orderData = { 'orderId': 123, 'price': 88 }
sessionStorage.setItem('缓存名称', JSON.stringify(orderData))

B组件就可以获取在A中设置的缓存了

const dataB = JSON.parse(sessionStorage.getItem('缓存名称'))

[Vue]子组件与父组件之间传值的更多相关文章

  1. Vue子组件与父组件之间的通信

    1.环境搭建 下载 vue-cli:npm install -g vue-cli 初始化项目:vue init webpack vue-demo 进入vue-demo文件夹:cd vue-demo 下 ...

  2. Vue(13)子组件与父组件超详细解析

    父组件和子组件 我们经常分不清什么是父组件,什么是子组件.现在来简单总结下:我们将某段代码封装成一个组件,而这个组件又在另一个组件中引入,而引入该封装的组件的文件叫做父组件,被引入的组件叫做子组件.具 ...

  3. JS中iframe子页面与父页面之间通信

    iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同. 一.同域下父子页面的通信 父页面parent.html <html> <head& ...

  4. React子组件与父组件传值

    一 子组件向父组件传值 //子组件var Child = React.createClass({ render: function(){ return ( <div> 请输入邮箱:< ...

  5. react 实现组件嵌套以及子组件与父组件之间的通信

    当子组件触发onChange事件时,实际调用的是父组件中的handelSelect函数,通俗来说就是父组件通过属性handleSelect实现与子组件之间的通信. 父组件:SignupForm 子组件 ...

  6. angular 子组件与父组件通讯

    1. 子组件app-sidebar.compnent.html (click)="goProject()"设置点击事件 <mat-list-item [routerLink] ...

  7. vue 子页面,向父页面 传值...

    子组件 通过 事件 向父组件传值..... 父组件 方法: methods: { appendData: function (list) { console.log(list); for (var i ...

  8. html中 iframe子页面 与父页面之间的方法调用 ;

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. jQuery中,子页面与父页面之间的调用方法

    在jQuery中, 子页面查找父页面的元素 parent.$("#元素Id") 父页面调用子页面的元素 $("#子页面iframe的Id").contents( ...

随机推荐

  1. WIN10环境下点击通知栏图标时自动切换输入法导致图标位置变动

    这个问题由来已久,每当点击系统右下角任务栏中的按钮时,原本是搜狗输入法就会自动变成“US [ 中文(简体,中国) ]”,图标会自动错位,导致响应的是其他功能. 假设上图是正常的环境,此时我点击电池图标 ...

  2. php学习之Model类

    <?php $config = include 'config.php'; //引入数据库配置文件 $model = new Model($config); //测试案例 // $saveDat ...

  3. JMeter-正则表达式(取出银行卡号后4位)

    { : "custName":"奚红艳", : "banks": : [ : : { : : : "id":" ...

  4. SQL-W3School-基础:SQL AND & OR 运算符

    ylbtech-SQL-W3School-基础:SQL AND & OR 运算符 1.返回顶部 1. AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤. AND 和 OR 运算符 ...

  5. springboot和hadoop2.7.7集成开发

    1.本人在腾讯云安装hadoop2.7.7,详细安装请看以前的博客 2.pom.xml文件 <?xml version="1.0" encoding="UTF-8& ...

  6. thinkphp模版主题使用方法

    3.1.3模版主题使用方法,手册貌似没有.配置项: 'DEFAULT_THEME'=>'default',//默认主题 'THEME_LIST'=>'default,theme',//主题 ...

  7. 一百二十九:CMS系统之七牛云存储介绍和配置

    将图片的存储.尺寸等图片本身的一些擦做,交给七牛云处理,自己只关注网站开发本身 七牛云官网:https://www.qiniu.com 操作 登录后,点击管理控制台 点击对象存储-->新建存储空 ...

  8. 【leetcode】521. Longest Uncommon Subsequence I

    problem 521. Longest Uncommon Subsequence I 最长非共同子序列之一 题意: 两个字符串的情况很少,如果两个字符串相等,那么一定没有非共同子序列,反之,如果两个 ...

  9. jmeter性能测试的指标分析和定义

    通常情况下,性能测试关注被测对象的时间与资源利用特性及稳定性.时间特性,即被测对象实现业务交易过程中所需的处理时间,从用户角度来说,越短越好.资源利用特性,即被测对象的系统资源占用情况,一般web系统 ...

  10. GCE 部署 ELK 7.1可视化分析 nginx

    目录 一.准备 1.1.服务器环境准备 二.安装 ES 2.1.遇到小问题 三.安装 Kibana 四.安装 Logstash 一.准备 我这边有一个网站放在了 Google VM 上面,所以打算在购 ...