我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue子组件更新props中的属性值问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue子组件更新props中的属性值问题

Vue子组件更新props的属性值

在子组件中更新props中的属性值,并且更新到父组件,有两种实现方式:.sync 和 自定义v-model

.sync属性

父组件在给子组件传值时,属性名后需要加修饰符.sync,格式 :子组件props属性名.sync

父组件

<template>
<div id="app">
    // 注意点一、:show后跟修饰符.sync
    // 等同于<my-componen :show="valueChild" @update:show="val => valueChild= val" />
    <my-component :show.sync='valueChild' />
</div>
</template>
<script>
export default {
    data(): {
        return {valueChild: false}
    }
}
</script>

子组件

<template>
    <h3>{{show}}</h3>
    <button @click="eventOpt">子组件事件</button>
</template>
<script>
export default {
   props: {
       show: { type: Boolean, default: false}
    } ,
    methods: {
        eventOpt() {
            // 注意二、事件名必须为update:属性名
            // 更改prop中的属性show的属性值,同时更新父组件中中valueChild的属性值
             this.$emit('update:show', false);
        }
    }
}
</script>

v-model应用

子组件定义的属性名必须为 value

父组件向上弹射事件给子组件时,事件名必须为 input

父组件

<template>
<div id="app">
   // 等同于<my-componen :value="valueChild" @input="val => valueChild= val" />
    <my-component :value='valueChild' />
</div>
</template>
<script>
export default {
    data(): {
        return {valueChild: false}
    }
}
</script>

子组件

<template>
    <h3>{{show}}</h3>
    <button @click="eventOpt">子组件事件</button>
</template>
<script>
export default {
   props: {
     // 注意点一、属性名必须为value
      value: { type: Boolean, default: false}
    } ,
    methods: {
        eventOpt() {
            // 注意二、事件名必须为input
            // 更改prop中的属性show的属性值,同时更新父组件中中valueChild的属性值
             this.$emit('input', false);
        }
    }
}
</script>

比较

v-model 子组件只能更改props中的一个属性值value;

.sync 子组件可以更改props中的多个属性值;

Vue子组件中修改Props的几种情况

首先列举平常使用Vue 父组件传递数据到子组件的几种情况

  • 传递的是基础数据类型(Number,Boolean,String)
  • 传递的是引用类型(Object,Array)

针对以上几种情况再逐一进行分析

1.首先定义一个子组件ChildComponent

<template>
    <div>
        我是子组件
        <input v-if="usePrimary" v-model="primaryType"/>
        <input v-else v-model="objectType.value"/>
    </div>
</template>
props:{
        primaryType:{
            type:String,
            default:''
        },
        usePrimary:{
            type:Boolean,
            default:true
        },
        objectType:{
            type:Object
        }
    }

2.然后在父组件中赋值

<child-component 
    class="child-component"
    :primaryType="primaryType"
    :object-type="objectType"
    :use-primary="usePrimary"
></child-component>
data(){
   return{
        primaryType:'我是基础数据类型',
        objectType:{value:'我是引用类型'},
        usePrimary:false
    }
 }

变量 usePrimary 用于控制子组件 input 的v-model引用的类型 当值为true 时表示v-model的类型为 基础数据类型,当值为false 时表示v-model是引用类型即(Object,Array)

结果展示

当prop的类型为基础数据类型时(usePrimary 为 true)

控制台会报错!!

当prop的类型为引用类型时(usePrimary 为 false)

控制台没有任何错误信息!!!

结论

  • 当传给子组件的Prop为基本数据类型是(Number,String)在子组件中修改Prop控制台会报错 prop的值不会改变
  • 当传给子组件的Prop为引用时(Object,Array)在子组件中修改Prop的属性不会报错且值可以改变

当然不建议在子组件中直接修改Prop的值,因为这样会破坏单一数据流,可能会导致数据的变化无法追踪。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue子组件更新props中的属性值问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue子组件更新props中的属性值问题

这篇文章主要介绍了Vue子组件更新props中的属性值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

Vue如何解决子组件data从props中无法动态更新数据问题

这篇文章主要介绍了Vue如何解决子组件data从props中无法动态更新数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

vue中组件的props属性有什么用

这篇文章主要介绍vue中组件的props属性有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!问题一:那props具体是怎么使用呢?原理又是什么呢?往下看1、【定义被调用组件】首先,我们先定义一个person组件
2023-06-25

探讨Vue子组件属性赋值的方法

前言Vue 是一种流行的 JavaScript 框架,能够在 Web 应用程序中快速而方便地构建可重用的组件。它通过响应式编程模型以及模板语法来实现组件化延伸。本文旨在探讨 Vue 子组件属性赋值的方法。Vue 子组件Vue 应用由一个或多个组件构成。Vue 组件遵循一种层次结构,从一个根组件开始,然后分解为更小的组件,形成层次组件结构。在 Vue 中,组件之间的传递数据是通过
2023-05-14

vue子组件中mounted取不到props中的值怎么解决

本文小编为大家详细介绍“vue子组件中mounted取不到props中的值怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue子组件中mounted取不到props中的值怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
2023-06-30

Vue中父子组件间传值问题怎么解决

本篇内容介绍了“Vue中父子组件间传值问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.父组件向子组件传值父组件向子组件传值会用
2023-07-05

一文浅析Vue中父子组件间传值问题

vue父子组件之间怎么传值?下面本篇文章带大家了解一下Vue中父组件以及子组件传值问题,希望对大家有所帮助!
2023-05-14

vue父子组件传值不能实时更新的解决方法

Vue是一个以数据驱动、组件化的前端框架,其中组件化是Vue中较为重要的概念之一,组件之间的通信则成为Vue中较为普遍的需求,下面这篇文章主要给大家介绍了关于vue父子组件传值不能实时更新的解决方法,需要的朋友可以参考下
2023-05-20

vue父组件数据更新子组件相关内容未改变问题怎么解决

这篇文章主要介绍“vue父组件数据更新子组件相关内容未改变问题怎么解决”,在日常操作中,相信很多人在vue父组件数据更新子组件相关内容未改变问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue父组
2023-06-29

编程热搜

目录