vue-组件-父子组件交互

vue-组件-父子组件交互

目录




内容

+图示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nlHaM7ZP-1595729050647)(./images/fs.jpg)]

1、父组件向子组件传值

  • 组件内部通过props接收传递过来的值

      Vue.component('MenuItem', {
      	...
      	props: ['title'],
      	template: `<div>{{ title }}</div>`
      	...
      })
    
  • 父组件通过同名属性把值传递给子组件

      <menu-item :title="ptitle"></menu-item>
      
      ...
      data: {
      	ptitle: '父组件数据'
      }
    
  • 示例1-1:

      <!DOCTYPE html>
      <html lang="zh-CN">
      <head>
      	<meta charset="UTF-8">
      	<meta name="viewport" content="width=device-width, initial-scale=1.0">
      	<title>02_pTOC</title>
      	<script src="../assets/js/vue.js"></script>
      </head>
      <body>
      <div id="app">
      	<div>{{ pmsg }}</div>
      	<menu-item :title="ptitle"></menu-item>
      </div>
    
      <script>
      	Vue.component('menu-item', {
      		data() {
      			return {
      				msg: '子组件本身的数据'
      			}
      		},
      		props: ['title'],
      		template: `<div>{{ msg  }} --- {{ title }}</div>`
      	})
      	const app = new Vue({
      		el: '#app',
      		data: {
      			pmsg: '父组件中的数据',
      			ptitle: '父组件传递过来的数据'
      		}
      	 });
       </script>
      </body>
      </html>	
      
      结果:
      父组件中的数据
      子组件本身的数据 --- 父组件传递过来的数据
    

2、props

2.1、属性名规则

  1. props中使用驼峰形式,模板中需要使用短横线的形式
  2. 字符串形式的模板中没有这个限制

2.2、props属性值类型

  • 字符串:String
  • 数值:Number
  • 布尔型:Boolean
  • 数组:Array
  • 对象:Object

2.3、props类型设置与校验

此处不做详述,在以后自定义组件中详细介绍。

3、子组件向父组件传值

  • 子组件v-on $emit :子组件通过自定义事件向父组件传递值

  • 父组件通过监听子组件获取值

  • 示例3-1:

      <!DOCTYPE html>
      <html lang="zh-CN">
      <head>
      	<meta charset="UTF-8">
      	<meta name="viewport" content="width=device-width, initial-scale=1.0">
      	<title>03_c2p</title>
      	<script src="../assets/js/vue.js"></script>
      </head>
      <body>
      <div id="app">
      	<div>{{ pmsg }}</div>
      	<subc @c2p="recieve"></subc>
      	<div> {{ smsg }}</div>
      </div>
    
      <script>
      	Vue.component('subc', {
      		data() {
      			return {
      				msg: '子组件内容'
      			}
      		},
      		template: `<button @click="transfer">子组件</button>`,
      		methods: {
      			transfer() {
      				this.$emit('c2p', this.msg)
      			}
      		},
    
      	})
      	const app = new Vue({
      		el: '#app',
      		data: {
      			pmsg: '父组件',
      			smsg: '父组件内容 '
      		},
      		methods:{
      			recieve(val) {
      				this.smsg += '---' + val
      			}
      		}
      	 });
       </script>
      </body>
      </html>
    

后记

vue官网地址:https://cn.vuejs.org/

本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785

前端项目源代码地址:https://gitee.com/gaogzhen/vue
后端JAVA源代码地址:https://gitee.com/gaogzhen/JAVA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gaog2zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值