组件通信Vue.js

子组件如何获取父组件中的数据?父组件如何得知子组件的数据变更?如果是更加复杂的组件关系呢?在组件间传递数据的操作,称为组件通信。组件通信
• 父组件向子组件传值
• 子组件向父组件传值
• 非父子组件传值
• 其他通信方式父组件向子组件传值
组件通信父组件向子组件传值
• 通过子组件的 props 选项接收父组件的传值。
注意:props 不要与 data 存在同名属性。父组件向子组件传值
• 父组件设置方式如下:

 

 

Props 命名规则
• 建议 prop 命名使用 camelCase,父组件绑定时使用 kebab-case

 

 

单向数据流

父组件向子组件传值父子组件间的所有 prop 都是单向下行绑定
的。单向数据流如果子组件要处理 prop 数据,应当存储在 data 中后操作。

 

Props 类型
父组件向子组件传值
Props 类型
• Prop 可以设置类型检查,这时需要将 props 更改为一个带有验
证需求的对象,并指定对应类型。

 

 • prop 还可以同时指定多个类型,通过数组方式保存即可

 

Props 验证
• 当 prop 需要设置多种规则时,可以将 prop 的值设置为选项对象。
• 之前的类型检测功能通过 type 选项设置

 

 required 用于设置数据为必填项。

 default 用于给可选项指定默认值,当父组件未传递数据时生效。

注意:当默认值为数组或对象时,必须为工厂函数返回的形式 

Props 验证
• validator 用于给传入的 prop 设置校验函数,return 值为false 时 Vue.js 会发出警告。

 注意:验证函数中无法使用实例的 data、methods 等功能。

非 Props 属性
• 当父组件给子组件设置了属性,但此属性在 props 中不存在,这 时会自动绑定到子组件的根元素上。

 

如果组件根元素已经存在了对应属性,则会替换组件内部的值。
• class 与 style 是例外,当内外都设置时,属性会自动合并。
如果不希望继承父组件设置的属性,可以设置 inheritAttrs: false,但只适用于普通属性,class 与 style 不受影响。
子组件向父组件传值
组件通信子向父传值需要通过自定义事件实现。子组件向父组件传值
• 商品为子组件,购物车为父组件,父组件需要统计商品个数,就需要在子组件个数变化时传值给父组件。

 

 

 

子组件数据变化时,通过 $emit() 触发自定义事件。
• 自定义事件名称建议使用 kebab-case。

 父组件监听子组件的自定义事件,并设置处理程序。

 

子组件向父组件传值
• 子组件触发事件时可以向父组件传值。

 

父组件在监听事件时需要接收子组件传递的数据。 

父组件在监听事件时需要接收子组件传递的数据 

 

组件与 v-model
• v-model 用于组件时,需要通过 props 与自定义事件实现

 

 

非父子组件传值
组件通信非父子组件指的是兄弟组件或完全无关的两
个组件。• 兄弟组件传值
非父子组件传值
• EventBus
• 其他传值方式兄弟组件传值
非父子组件传值兄弟组件可以通过父组件进行数据中转

 

 

EventBus
非父子组件传值当组件嵌套关系复杂时,根据组件关系传值
会较为繁琐。组件为了数据中转,data 中会存在许多与当
前组件功能无关的数据。EventBus
• EventBus (事件总线)是一个独立的事件中心,用于管理不同组
件间的传值操作。
• EventBus 通过一个新的 Vue 实例来管理组件传值操作,组件通
过给实例注册事件、调用事件来实现数据传递。
• 发送数据的组件触发 bus 事件,接收的组件给 bus 注册对应事

 

 给 bus 注册对应事件通过 $on() 操作。

最后创建根实例执行代码即可。 

 

其他通信方式
• $root
• $refs$root
其他通信方式$root
• $root 用于访问当前组件树根实例,设置简单的 Vue 应用时可以
通过此方式进行组件传值。

 

 

 

除了 $root , Vue.js 中还提供了 $parent 与 $children 用于
便捷访问父子组件。

 

$refs 用于获取设置了 ref 属性的 HTML 标签或子组件。$refs
• 给普通 HTML 标签设置 ref 属性,$refs 可以获取 DOM 对象。

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript是一种流行的编程语言,被广泛用于网页开发。Vue.js是一个基于JavaScript的前端开发框架,它提供了一套简洁、灵活的工具,使得开发者可以更轻松地构建交互式的Web应用程序。 Vue.js具有以下特点: 1. 渐进式:Vue.js采用渐进式的设计,可以逐步引入到现有的项目中,也可以通过逐步学习来适应各种开发需求。 2. 轻量级:Vue.js的核心库只有约21KB,加载速度快,非常适合于移动端开发。 3. 组件化:Vue.js支持组件化的开发方式,开发者可以根据需要构建复用性高、可维护性好的组件,提高开发效率。 4. 响应式:Vue.js采用了响应式的设计,当数据发生变化时,对应的页面会自动更新,大大减少了处理DOM操作的工作。 5. 单文件组件:Vue.js支持单文件组件的开发方式,将HTML、CSS、JS代码封装在同一个文件中,提高了代码的可读性和可维护性。 一个使用Vue.js的Web开发案例教程可能包含以下内容: 1. 环境搭建:介绍如何安装配置开发Vue.js的环境,如Node.js和Vue CLI。 2. 基础语法:引导学习者了解Vue.js的基本语法和常用指令,如数据绑定、事件处理、条件渲染等。 3. 组件开发:讲解如何使用Vue.js构建组件,如何进行组件通信、数据传递等。 4. 路由管理:介绍Vue Router,帮助学习者构建单页应用程序,实现页面之间的切换和导航。 5. 状态管理:介绍Vuex,帮助学习者管理应用程序的状态,实现数据的集中管理和共享。 6. 前后端交互:介绍如何使用Axios等工具,与后端服务器进行数据交互。 7. 实战项目:引导学习者完成一个完整的Vue.js项目,如博客系统、电子商务网站等。 通过这样的案例教程,学习者可以逐步了解和掌握Vue.js的开发思想和技术,提高自己的Web开发能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值