【Vue.JS】Vue.JS 中 props 从父组件向子组件传递数据取值问题

关于 VueJS 中 props 传递数据时需要重点注意的一个地方 – 命名。

代码如下

<div id="app">
    <div>
        <p>
            props 中声明的数据与组件 data 函数中 return 的数据主要区别就是 props 的数据来自父级,而 data 中的数据是组件本身的,作用域是组件本身
        </p>
    </div>
    <br>
    <input type="text" v-model="parentMessage">
    <my-component :warningText="parentMessage"></my-component>
</div>
<script>
Vue.component('my-component', {
        props: ['warningText'],
        template: '<div style="color:red">{{warningText}}</div>',
        data: function () {
            return {};
        }
    })
    var app = new Vue({
        el: "#app",
        data: {
            parentMessage: 'Hello',
        }
    })
</script>

如上:一眼望去,似乎并没有什么问题。但是,结果却…

img1

经过一番调试,发现,需要将父组件的数据名称 warningText 修改为 warning-text。 如下:

<div id="app">
    <input type="text" v-model="parentMessage">
    <my-component :warning-text="parentMessage"></my-component>
</div>
<script>
    Vue.component('my-component', {
        props: ['warningText'],
        template: '<div style="color:red">{{warningText}}</div>',
        data: function () {
            return {};
        }
    })
    var app = new Vue({
        el: "#app",
        data: {
            parentMessage: 'Hello',
        }
    })
</script>

img2

由于好奇心的促使
先尝试将 props 属性接收的名称和父组件中传递的名称都命名为短横线形式,如下:

<div id="app">
    <input type="text" v-model="parentMessage">
    <my-component :warning-text="parentMessage"></my-component>
</div>
<script>
    Vue.component('my-component', {
        props: ['warning-text'],
        template: '<div style="color:red">{{warningText}}</div>',
        data: function () {
            return {};
        }
    })
    var app = new Vue({
        el: "#app",
        data: {
            parentMessage: 'Hello',
        }
    })
</script>

img4

发现可以接收到数据

继续,插值表达式中的名成也修改为 warning-text

<div id="app">
    <input type="text" v-model="parentMessage">
    <my-component :warning-text="parentMessage"></my-component>
</div>
<script>
    Vue.component('my-component', {
        props: ['warning-text'],
        template: '<div style="color:red">{{warning-text}}</div>',
        data: function () {
            return {};
        }
    })
    var app = new Vue({
        el: "#app",
        data: {
            parentMessage: 'Hello',
        }
    })
</script>

img5

显示的值为 NaN

总结

由于 HTML 特性不区分大小写,当使用 DOM 模板时,驼峰式命名的 props 名称要转为短横线分隔命名的形式。
★ 当 props 传值取不到时,一定要首先核对是否是命名规则的自动转换导致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HolaSecurity

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

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

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

打赏作者

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

抵扣说明:

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

余额充值