[Vue]组件传值中的参数校验和非props特性

博客介绍了组件传值中的非props特性,纠正了认为父传子一定要用‘冒号’的认知。指出写在组件中的键值对是否传值取决于子组件props是否接收,冒号只是将引号内容变为js表达式。

非props特性

之前我一直以为父传子,一定要使用‘冒号’,例如: :data,后来才知道,写在组件中的键值对,是否为传值取决于子组件中props 是否接收,冒号,只是将引号中的内容变成js表达式

<div id="app">
        <child content='wxf'></child>
</div>
script>
    Vue.component('child', {
        template: '<div>hello world {{content}}</div>',
        props: ['content'], // 一般写法
        props: {
            content: {
                type: String, // 期望传入值的类型,多类型可以用数组 type: [String, Number]
                required: false, // Boolen 是否必须
                default: 'zjj', // 默认值,当父组件未传入该值时,默认使用
                validator: function (value) { // 验证 此时形参 value 为父组件传入的值, 此处的规则为验证参数的长度,返回Boolen
                    return (value.length > 5)
                }
            }
        }
    })
    var vm = new Vue ({
        el: '#app',
    })
</script>
复制代码

转载于:https://juejin.im/post/5cd01d67f265da0379418ce9

### Vue 父子组件间的数据递及校验 在 Vue 中,父子组件间的通信遵循单向数据流原则。父组件可以通过 `props` 将数据递给子组件;反过来,子组件则可通过 `$emit()` 方法触发自定义事件并向上层组件发送消息。 #### 使用 Props 进行数据递 当需要从父级向子级输信息时,通常会利用 props 属性完成这一过程。例如,在一个展示博客列表的应用场景下: ```html <!-- ParentComponent.vue --> <template> <ChildComponent :posts="posts"/> </template> <script setup> import ChildComponent from './ChildComponent.vue'; import { ref } from 'vue'; const posts = ref([ { id: 1, title: 'My journey with Vue' }, { id: 2, title: 'Blogging with Vue' }, { id: 3, title: 'Why Vue is so fun' } ]); </script> ``` 上述代码展示了如何通过 v-bind 的方式将父组件中的 blog 文章数组递至名为 `ChildComponent` 的子组件中[^1]。 #### 子组件接收 Prop 并设置验证规则 为了确保接收到的数据符合预期格式,可以在子组件内部对接收的 prop 设置相应的类型检查和其他约束条件: ```javascript // ChildComponent.vue export default { name: "ChildComponent", props: { posts: { type: Array, required: true, validator(value) { // 自定义验证逻辑 return value.every(item => typeof item.title === 'string'); } } } } ``` 这段脚本仅指定了 `posts` 应该是一个数组类型的需项,还额外加入了验证器函数用于确认每篇文章对象都含有字符串形式的标题字段[^5]。 #### 利用 Events 反馈状态变化 对于那些希望由子组件发起更新请求的情况,则应采用基于事件驱动的方式来实现双向沟通。比如点击按钮增加计数的例子: ```html <!-- BaseCount.vue (child component) --> <template> <div class="base-count"> <button @click="$emit('decrement')">-</button> <span>{{ count }}</span> <button @click="$emit('increment')">+</button> </div> </template> <script> export default { data() { return { count: 100, }; } }; </script> ``` 此时,每当用户操作加减号按钮时,就会触发对应的 decrement 或 increment 事件通知上级组件做出响应[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值