tulip notes
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Star-Lord

希望一天成为大师的学徒
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • 组件

    • 组件基础
    • 组件的一些注意点
    • 组件之间的传值
      • 父组件传值给子组件
        • 配置props
        • props的一些限制
        • 单向数据流动
        • props的更多作用
    • 组件间的调用
    • 自定义事件
    • 全局事件总线
    • Prop 验证 与 非 Prop 的 Attribute
    • 兄弟组件传值
    • 父组件调用子组件方法并传入值
    • 插槽slot
    • 动态组件与 v-once 指令
    • vue父子组件的生命周期顺序
  • 过渡&动画

  • 可复用性&组合

  • 工具

  • 规模化

  • Vuex

  • 其他

  • 《Vue》笔记
  • 组件
EffectTang
2023-09-13
目录

组件之间的传值

# 组件之间的传值

# 父组件传值给子组件

# 配置props

父组件调用子组件来显示某一视图,但是如何让子组件显示指定的数据呢?把数据传递给子组件吧。

通过在子组件中配置props属性可以实现——数据从父组件传递到子组件。子组件可以使用这些数据来渲染视图或者执行其他操作。

在子组件中的props配置了哪些属性,就表示允许父组件给子组件的这些属性传值。以下是一个简单的例子。

<template>
  <div>
    <h2>{{ name }}</h2>
    <h2>{{ age }}</h2>
  </div>
</template>

<script>
export default {
  name: 'MyComponent',
  props: {
    name: {
      type: String,
      required: true
    },
    age:{
      type:number,
      default:18
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

传值 —— < Demo name="xx" | :name="xx">

MyComponent组件有一个名为name的props,它的类型是字符串,并且是必需的。

<template>
  <div>
    <MyComponent name="sam" :age="18"></MyComponent>
  </div>
</template>

<script>
  import MyComponet from './component/MyComponent'
  
  export default {
    name: 'App',
    components:{MyComponent}
  }
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

将字符串sam传递给MyComponent组件,同时给age这个属性传递一个js表达式(在上述例子中表达式为数字18)之后子组件将在内部使用这个值跟表达式计算后得到的值来渲染视图。

# props的一些限制

props的写法有多种,不同的写法有不同的作用

  • 简单写法(不对传来值做任何限制)
props:['name','age']
1
  • k-v写法 (对传来的值做数据类型的限制)
props:{
  name:String,
  age:Number
}
1
2
3
4
  • 对象写法 (可以对类型、默认值以及是否必传做限制)
props: {
    name: {
      type: String,
      required: true
    },
    age:{
      type:number,
      default:18
    }
  }
1
2
3
4
5
6
7
8
9
10

# 单向数据流动

通过props从父组件传递数据到子组件,这个数据是单向流动。简单的说就是在子组件中通过修改对应属性的数据,是无法成功的。

如果确实有业务需求进行改动,可以考虑用中转变量来实现——数据的变更(定义一个本地的 data 属性并将这个 prop 用作其初始值)

<p>{{myAge}}</p>
<button @click="updateDemo"> </button>
//......
data(){
	return{
		myAge:this.age
	}
}
method:{
 updateDemo(){
		this.myAge = 99;
	}
}
props:['age']
1
2
3
4
5
6
7
8
9
10
11
12
13
14

在上述例子中,直接操作this.age是无法成功的,所以选择了创建一个中转变量myAge来进行展示。

注意:age的值始终没有被改变,例子中的方法只是为了解决业务场景提供的一种思路

# props的更多作用

prop验证:可以通过在props上定义验证函数,对传递过来的数据进行验证。如果数据不符合要求,Vue会显示一个警告信息。

上次更新: 2025/04/23, 16:23:16
组件的一些注意点
组件间的调用

← 组件的一些注意点 组件间的调用→

最近更新
01
面向切面跟自定义注解的结合
05-22
02
时间跟其他数据的序列化
05-19
03
数据加密与安全
05-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 EffectTang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式