vue的父子组件间的相互传参props及props数据的多种验证机制
感觉自己即将完全步入前端大军,后台老板都不需要我弄了,塞翁失马。。。时间会告诉我们是好是坏
好了言归正传,最近vue是搞的不亦乐乎啊,下面来总结一下vue组件间的各种使用方法以及一些技巧
----------------------------------------------------------------------
1.父组件如何向子组件传参数
<div id="app">
<!-- 传递静态值 --这里firstBlood为什么要写成first-blood上一篇已经说明 -->
<son-demo first-blood="参数值"></son-demo>
<!-- 传递动态值 -->
<son-demo :first-blood="giveSon"></son-demo>
<!-- 如果要直接传递Boolean值 --这里的true会被直接解析成true而不是字符串 -->
<son-demo :first-blood="true"></son-demo>
</div> <script type="text/x-template" id="sonModel">
<h1>{{firstBlood}}</h1>
</script> <script>
//定义子组件
var sonDemo = {
template: "#sonModel",
props:['firstBlood'],
data(){
return {};
},
}
//父组件
new Vue({
el: '#app',
components: {
sonDemo //也可以这样写 sonDemo: sonDemo
},
data: {
giveSon:'给儿子的值'
}
});
</script>
注意:vue不推荐直接在子组件中修改父组件传来的props的值,会报错
[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "" (found in component )
如果要修改,在子组件里定义一个新变量来接收↓
data(){
return {
getFirstBlood: this.firstBlood //通过data, 定义新变量getFirstBlood, 这样getFirstBlood的值变更时,不会影响父组件传来的firstBlood的值
}
}
还有如果传递的参数是数组类型的话,子组件是可以直接对其进行操作的,同时父组件里的数组也会跟着变,如果不想污染初始值最好还是新定义一个变量接收
2.父组件向子组件传值时对传递的参数进行类型验证,如果没传给个默认值
type 可以是下列原生构造函数中的一个:String、Number、Boolean、Array、Object、Date、Function、Symbol
<div id="app">
<!-- 传递动态值 -->
<son-demo :show-or-del="isshow" :first-blood="giveSon"></son-demo>
</div> <script type="text/x-template" id="sonModel">
<h2 v-if="showOrDel"></h2>
<h1>{{firstBlood}}</h1>
</script> <script>
//定义子组件
var sonDemo = {
template: "#sonModel",
props: {
showOrDel: {
type: [Boolean, Number],
required: true
},
firstBlood: {
type: String,
required: '默认值'
}
},
data(){
return {};
},
}
//父组件
new Vue({
el: '#app',
components: {
sonDemo //也可以这样写 sonDemo: sonDemo
},
data: {
isshow: false,
giveSon:'给儿子的值'
}
});
</script>
3.子组件如何向父组件传递参数 关键词$emit
<div id="app">
<son-demo @giveFatherInfo="getSonInfo"></son-demo>
</div> <script type="text/x-template" id="sonModel">
<button @click="giveDad">点击给父亲传值</button>
</script> <script>
//定义子组件
var sonDemo = {
template: "#sonModel",
data(){
return {
idValue:'123445'
};
},
methods: {
giveDad(){
this.$emit('giveFatherInfo', this.idValue);
}
}
}
//父组件
new Vue({
el: '#app',
components: {
sonDemo //也可以这样写 sonDemo: sonDemo
},
data: {
userid: ''
},
methods: {
getSonInfo(v) {
this.userid = v;
},
},
});
</script>
欢迎大家来讨论技术,相互学习
vue的父子组件间的相互传参props及props数据的多种验证机制的更多相关文章
- 041——VUE中组件之pros数据的多种验证机制实例详解
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue的父子组件间通信及借助$emit和$on解除父子级通信的耦合度高的问题
1.父子级间通信,父类找子类非常容易,直接在子组件上加一个ref,父组件直接通过this.$refs操作子组件的数据和方法 父 这边子组件中 就完成了父 => 子组件通信 2. 子 =&g ...
- vue之父子组件间通信实例讲解(props、$ref、$emit)
组件间如何通信,也就成为了vue中重点知识了.这篇文章将会通过props.$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信. 组件是 vue.js 最强大的功能之一,而组件实例 ...
- Vue—非父子组件间的传值(Bus/发布订阅模式/观察者模式/总线)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue非父子组件间传参问题
最近在使用vue进行开发,遇到了组件之间传参的问题,此处主要是针对非父子组件之间的传参问题进行总结,方法如下:一.如果两个组件用友共同的父组件,即 FatherComponent.vue代码 < ...
- 【vue】父子组件间通信----传值
官方文档参考 (一)父组件 向 子组件 传值 ①在父组件中调用子组件处,绑定要传的数据data1, 如 <nav :data1=" " ></nav> ...
- 应用六:Vue之父子组件间的三种通信方式
(注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的) 组件是Vue的核心功能之一,也是我们在开发过程中经常要用到的.各个独立的组件之间如何进行数据 ...
- 简述vue中父子组件是怎样相互传递值的(基础向)
前言 首先,你需要知道vue中父组件和子组件分别指的是什么? 父组件:vue的根实例——用new Vue()构造函数创建的vue实例(实例会有一个挂载点,挂载点里的所有内容可理解为父组件的内容) ...
- 【vue】父子组件间通信----传函数
(一)子组件 调用 父组件 方法 方式一) 子组件中通过this.$parent.event来调用父组件的方法 父组件 <template> <div> <child&g ...
随机推荐
- Elasticsearch笔记三之版本控制和插件
版本控制 1:关系型数据库使用的是悲观锁,数据被读取后就被锁定其他的线程就无法对其进行修改. 2:ex使用的是乐观锁,数据被读取后其他程序还可以对其进行修改,而执行修改时发现此数据已经被修改则修改就会 ...
- 【Dp】Bzoj1296 [SCOI2009] 粉刷匠
Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...
- 钉钉机器人zabbix报警
首先在钉钉群聊里添加一个自定义的机器人 并复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4 ...
- jdk源码剖析一:OpenJDK-Hotspot源码包目录结构
开启正文之前,先说一下源码剖析这一系列,就以“死磕到底”的精神贯彻始终,JDK-->JRE-->JVM(以openJDK代替) 最近想看看JDK8源码,但JDK中JVM(安装在本地C:\P ...
- Ceilometer + Aodh + Gnocchi 介绍
一. Ceilometer 1. 概述 Openstack ceilometer主要用于监控虚拟机.服务(glance.image.network等)和事件.虚拟机的监控项主要包括CPU.磁盘 ...
- mysql中利用group by过滤删除重复行
DELETEFROM peopleWHERE peopleId IN (SELECT peopleId FROM people GROUP BY peopleId HAVING count(peopl ...
- python 安装cv2
问题描述:import cv2 报错提示未安装此包. 解决措施: 1.cmd框中输入pip install cv2,若安装成功,则恭喜你一次性成功,如提示"无法找到与你当前版本的匹配&quo ...
- PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...
- 深入理解OkHttp源码(一)——提交请求
本篇文章主要介绍OkHttp执行同步和异步请求的大体流程.主要流程如下图: 主要分析到getResponseWidthInterceptorChain方法,该方法为具体的根据请求获取响应部分,留着后面 ...
- k8s使用helm打包chart并上传到腾讯云TencentHub
本文只涉及Helm的Chart操作,不会对其他知识进行过多描述.至于安装这块,麻烦自行百度吧,一大堆呢. 在容器化的时代,我们很多应用都可以部署在docker,很方便,而再进一步,我们还有工具可以对d ...