欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 前端技术 > vue >内容正文

vue

六十一、vue中父子组件传值和组件参数校验 -凯发k8官方网

发布时间:2024/10/8 vue 26 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 六十一、vue中父子组件传值和组件参数校验 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

@author:runsen

@date:2020/10/17

写在前面:我是「runsen」,热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。大四弃算法转前端,需要每天的日积月累,需要强大的自控自制能力。

文章目录

  • 父组件向子组件传值
  • 子组件向父组件传值
  • 组件参数校验
  • 后言
  • 传值步骤
  • ① 子组件在 props中创建一个属性,用以接收父组件传过来的数据;

    ② 父组件中注册子组件。通过属性绑定( v-bind:)的形式,把需要传递给子组件的数据传递到子组件的内部,供子组件使用;

    ③ 在子组件标签中添加子组件 props中创建的属性;

    ④ 把需要传给子组件的值赋给该属性

  • 代码示例
  • <body><div id="app"><counter :count="1">counter><counter :count="2">counter>div><script>// 定义一个局部组件var counter = {props:["count"],template: "
    {{count}}
    "
    ,methods: {handleclick:function(){// 修改了父组件中的count值(不建议),子组件不能修改从父组件传递过来的值this.count }},}var vm = new vue({el:"#app",components:{counter:counter}})
    script> body>

    父组件可以修改传给子组件的值,但是子组件不能修改从父组件传递过来的值,因为可能会有其他组件共用这个值,因此vue会报[vue warn]: avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. instead, use a data or computed property based on the prop's value. prop being mutated: "count"的警告错误。
    `

    解决的方法:子组件可以将这个组件拷贝出来后操作拷贝值,最终的代码示例

    <body><div id="app"><counter :count="1">counter><counter :count="2">counter>div><script>// 定义一个局部组件var counter = {props:["count"],data() {return {//子组件需要将父组件拷贝出来后操作拷贝值number: this.count}},template: "
    {{number}}
    "
    ,methods: {handleclick:function(){// 修改了父组件中的count值(不建议),子组件不能修改从父组件传递过来的值this.number }},}var vm = new vue({el:"#app",components:{counter:counter}})
    script> body>

    子组件传值给父组件流程:

    • 1.子组件绑定事件

    • 2.子组件的事件处理函数中通过$emit()向外触发事件,可携带参数

    • 3.父组件监听子组件触发的事件

    • 4.在父组件的事件处理函数中拿到子组件传递的参数,处理子组件的请求

    子组件对自己无法操作的数据向父组件抛出请求(通过$emit()向外触发事件),这个请求中可携带相关数据,等待父组件接收这个响应然后自行处理这个请求后更新的数据重新被传递给子组件。

    代码示例

    =<body><div id="app"><counter :count="3" @change="handlechange">counter><counter :count="2" @change="handlechange">counter><div>{{total}}div>div><script>// 定义一个局部组件var counter = {props:["count"],data() {return {//子组件需要将父组件拷贝出来后操作拷贝值number: this.count}},template: "
    {{number}}
    "
    ,methods: {handleclick:function(){// 修改了父组件中的count值(不建议),子组件不能修改从父组件传递过来的值this.number = this.number 2// 子组件向父组件$emit()向外触发事件,可携带参数this.$emit("change",2)}},}var vm = new vue({el:"#app",components:{counter:counter},data:{total:5},methods:{// 在父组件的事件处理函数中拿到子组件传递的参数,处理子组件的请求handlechange:function(step){this.total = step}}})
    script> body>

    总结:父组件向子组件传值用私有的data数据拷贝props数据,再操作data来实现。子组件传值给父组件一共四个流程。

    在组件传值过程中,无论是父传子、还是子传父,它们都有一个共同点就是有一个中间介质。父传子的介质是 props中的属性,子传父的介质是自定义事件。

    父子组件的关系可以总结为props向下传递,事件向上传递。父组件通过props给子组件下发数据,子组件通过事件给父组件发送信息。

    父组件通过 v-bind:绑定参数传给子组件,子组件通过 props接收这个参数。
    在组件的最底层开始写事件,由最底层组件逐步向上$emit事件流,并携带相应参数,最后在父组件内完成总的数据处理。

    props 可以是数组或对象,用于接收来自父组件的数据。props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义验证和设置默认值。

    <body><div id="app"><child content="hello world">child>div><script>vue.component("child",{// props可以用数组,也可以用对象// props: ['content'],props:{// 对content进行约束number 如果约束是number或者string,content: [number,string]// content:number// 在content中还有validator 复杂校验规则,自定义校验器content:{type:string,// 如果type不是string,默认是defaultrequired:false,default:"如果type不是string,默认是default",validator:function(value){//复杂校验规则,自定义校验器return (value.length>5)} }},template:"
    {{content}}
    "
    })var vm = new vue({el: "#app",})
    script> body>

    参考资料:

    • 慕课网vue2.5->2.6->3.0 开发去哪儿网app 从零基础入门到实战项目开发
    • https://mp.weixin.qq.com/s/yvt9mnqwcydugg3qqdawea

    据说,放张小姐姐觉得照片可以提高阅读量,图是来源学校的2020新生。

    这个时代做什么事,门槛都变得好高,想当个宅男,你买得起房子吗?看看学校的新生,养下眼,这种白日梦不要做!

    总结

    以上是凯发k8官方网为你收集整理的六十一、vue中父子组件传值和组件参数校验的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

    • 上一篇:
    • 下一篇:
    网站地图