vue子组件赋值props_vue 父子传值props赋值失效问题

v2-1d68cb8fdc870202e6bbda4bbecffc7f_1440w.jpg?source=172ae18b

前天我的同事问了我一个问题,说她遇到一个父子组件之间的props赋值失效的问题,奇怪的是同一个页面另外一个地方也调用了同一个子组件并且props使用赋值正常,而且她和我说其他props能正常赋值,还就只有一个props:noOptionsText这个属性赋值失效。附上图:

props赋值正常的代码块(模板字符串中调用):

v2-42580282e64bb08a8ceb36d43d3ec855_b.jpg

props赋值失效的代码块(template中调用):

v2-adfc5b26520006250bcfcf8e71b4857f_b.jpg

一开始我也是愣住了,在子组件中用watch监听失效的props:noOptionsText属性,发现确实赋值失效而且其他属性也确实能赋值成功(除了props:noOptionsText以及noResultsText)。并且我也确信肯定是props属性名有问题,排除了单词拼错多加空格等低级错误,我在子组件打印了它的整个props对象,发现了问题所在:

在vue的中文官网有这样的说明:HTML 中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。

这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名。

在Vue的源码中创建Vue组件的时候createComponent(),解析组件的相关属性,

// extract props

在extractPropsFromVNodeData()中,Vue通过调用内部方法hyphenate,把驼峰形式的属性转换为横断线形式。

/**

但是!!!如果你使用字符串模板,那么这个限制就不存在了。这也就出现了文章开头,为什么一模一样的命名方式在字符串模板中props还是能够正常赋值。

v2-7a8ac46710e5482e9dc8184d622542df_b.jpg

最后附上正确的命名方式:

v2-4ee3fc054c4042be3666e650e3c2b82b_b.jpg

其实,会出现这种问题,还是说明自身vue基础还是不够稳固,而且我也被字符串模板那边能正常赋值给蒙住了,导致最后我还是靠打印props对象才发现了问题的根源。

bug无止境,踩坑无涯。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值