vue组件 v-model语法糖

今天学习了:

Prop 是你可以在组件上注册的一些自定义特性。

注意:一个组件默认可以拥有任意数量的 prop,任何值都可以传递给任何 prop

Prop命名风格:

(1)Prop 的命名风格
①PascalCase首字母大写命名即大驼峰法
②camelCase 小驼峰命名法
③kebab-case 短横线分隔命名法

注意:
HTML 中的特性是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,驼峰命名法的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名

(1)Prop 的命名风格,案例:
在这里插入图片描述

(1)静态Prop
如下所示,你已经知道了可以像这样给 prop 传入一个静态的值
在这里插入图片描述
(2)动态Prop
prop 可以通过 v-bind 动态赋值,对上述案例稍作修改
在这里插入图片描述

props传值格式:

这里介绍下props传值时的细节点
props传值格式:props传值时,如果属性添加了:则会将后面的属性值理解为表单式,否则将会理解为字符串
在这里插入图片描述

组件参数props校验:

Prop类型:
如果希望每个 prop 都有指定的值类型,可以以对象形式列出 prop,这些属性的名称和值分别是 prop 各自的名称和类型,如下所示:
在这里插入图片描述
组件参数校验:
父组件向子组件传值时,子组件有权对传递的内容进行相关约束,这个过程便是组件的参数校验。
在这里插入图片描述

组件参数校验—基础验证:
需求:子组件要求父组件传递过来的值必须是数字(此时props可以改成对象格式,对象的键为接收的参数名字,值为数据类型)
此时,如果父组件传递的值类型不满足数字,即报错
在这里插入图片描述
组件参数校验—多类型验证:
需求改进:
子组件接收的数据类型为数字或者字符串,即传递过来的数据类型要么为Number,要么为String。
此时可以借助数组语法
在这里插入图片描述
组件参数校验—复杂验证(必填项):
参数校验规则除了上述简单的类型与多类型校验外,还可以执行更复杂的校验,如下所示
在这里插入图片描述

组件参数校验—复杂验证(必填项):
必填项校验,如下所示
在这里插入图片描述

组件参数校验—复杂验证(默认项):
require设置为false时,则为非必填项;此外,还可以设置default默认项。
在这里插入图片描述

组件参数校验—复杂验证(默认项):
如果父组件传值,则会覆盖默认值
在这里插入图片描述

小结:
1、非必填时,如果未传值,则会显示默认值
2、如果传值,则会覆盖默认值

组件参数校验—复杂验证(自定义校验):
除了上述校验外,还可以定义更复杂的校验,使用validator(校验器)可以实现自定义校验。

案例:要求所传参数数值必须在18-50之间
在这里插入图片描述

组件参数校验—复杂验证(自定义校验):
如果父组件传参不满足自定义校验范围,则会报错.
在这里插入图片描述

组件参数校验简介:
组件参数校验即子组件接收父组件传递参数时,执行数据校验

分类类型:
①基础数据类型type校验
②多条件数据类型type校验{[]}
③必填项required校验
④默认值default校验
⑤自定义校验器validator校验

非props特性与props特性:

非props特性与props特性
props特性:父组件传递属性时,子组件的props里声明了对父组件所传属性的接收,即子组件通过props接收父组件所传属性。

非props特性:父组件传递属性时,子组件的props里没有声明对父组件所传属性的接收,即子组件没有通过props接收父组件所传属性。

场景:
vue中默认情况下,调用组件时,如果传入一些没有在props中定义的属性,会把这些“非法”属性渲染在组件的根元素上(class和style例外),而这些“非法”的属性会记录在$attrs属性上。
在这里插入图片描述

props特性:父组件传递属性时,子组件的props里声明了对父组件所传属性的接收,即子组件通过props接收父组件所传属性。
在这里插入图片描述

非props特性:父组件传递属性时,子组件的props里没有声明对父组件所传属性的接收,即子组件没有通过props接收父组件所传属性。
改动上述案例,去除props传递属性步骤,如下所示
在这里插入图片描述

$attrs和inheritAttrs属性:

场景:
vue中默认情况下,调用组件时,如果传入一些没有在props中定义的属性,会把这些“非法”属性渲染在组件的根元素上(class和style例外),而这些“非法”的属性会记录在$attrs属性上。
在这里插入图片描述

inheritAttrs继承属性
如何控制不把这些非法的属性渲染在组件的根元素上呢?
答案是在组件内部设置inheritAttrs:false即可。
在这里插入图片描述

a t t r s 指 向 渲 染 属 性 : 通 过 v − b i n d = " attrs指向渲染属性: 通过v-bind=" attrsvbind="attrs"可以把“非法”的属性渲染到指定的组件某个元素上
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

my-input的使用方式就像原生的input一样,而且my-input并没有设置props,如下
在这里插入图片描述

1、props是用来接收父组件数据的,子组件不可以直接更改props接收的数据,即单向数据流概念。
2、非props特性:
①子组件未通过props接收,不能显示在dom上;
②子组件模板内直接写入内容而非插值表达式,会显示在dom最外层标签上
3、props特性:概括为父组件传,子组件接,dom标签内直接用。
4、props的值可以是两种,一种是字符串数组,一种是对象;
5、props中声明的数据与组件data函数return的数据主要区别
①props的来自父级
②data中的是组件自己的数据,作用域是组件本身
③这两种数据都可以在模板template及计算属性computed和方法methods中使用。
6、inheritAttrs继承属性+ a t t r s 属 性 , 即 可 解 决 非 p r o p s 属 性 带 来 的 问 题 7 、 attrs属性,即可解决非props属性带来的问题 7、 attrsprops7attrs–继承所有的父组件属性(除了prop传递的属性、class 和 style )
8、inheritAttrs:默认值true,继承所有的父组件属性(除props的特定绑定)作为普通的HTML特性应用在子组件的根元素上,如果你不希望组件的根元素继承特性设置inheritAttrs: false,但是class属性会继承
9、$attrs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值