【Vue】父子组件传值

13 篇文章 0 订阅

使用组件的意义就在于减少代码量,这里以修改列表为例,演示父子组件传值。

效果:

子组件代码:

<template>
  <div style="margin-left: 20px">
    |----edit----|  name:
    <input v-model="value.name">
    age:
    <input v-model="value.age">
    <button @click="save">save</button>
  </div>
</template>

<script>
    export default {
        name: "Vue04-a",
        data() {
            return {
                value: {
                    id:undefined,
                    name: '',
                    age: undefined,
                }

            }
        },
        methods: {
            save() {
                this.$emit('setItem', this.value)
            }
        },
        props: ['item'],//定义外部使用的属性,对本身来说都是只读的,修改后报错,同时也无法回馈到父组件
        mounted() {
            this.value.id=this.item.id;
            this.value.name=this.item.name;
            this.value.age=this.item.age;
        }
    }
</script>

<style scoped>

</style>

父组件代码:

<template>
<div>
 <ul>
   <li v-for="(item,index) in arr" :key="index">
     name:  {{item.name}}   ,    age: {{item.age}} <liEditer  :item="item" @setItem="setItem"></liEditer>
   </li>
 </ul>

</div>
</template>

<script>
  import liEditer from './Vue04-a'
    export default {
        name: "Vue04",
        components:{
            liEditer:liEditer
        },
        data(){
            return{
                arr:[
                    {id:1,name:'c',age:20},
                    {id:2,name:'e',age:21},
                    {id:3,name:'g',age:22}
                ]
            }
        },
        methods:{
            setItem(value){
                var item= this.arr.find(x=>x.id==value.id);
                item.name=value.name;
                item.age=value.age;
            }
        }
    }
</script>

<style scoped>
li{
  display: flex;
}
</style>

父向子传值:  父v-bind=>子props定义  接受即可,props定义的属性,不能在子组件进行修改,会引发报错,同时父组件对应的值也不会随之改变;

子向父传值:这有点像C# 里面的 窗体委托传值,使用方法把数据带回来。

父组件也可以用过ref获取子组件的值

使用ref对子组件进行标记,就可直接访问组件里面的数据

<template>
<div>
 <ul>
   <li v-for="(item,index) in arr" :key="index">
     name:  {{item.name}}   ,    age: {{item.age}}
<!--     <liEditer  :item="item" @setItem="setItem"></liEditer>-->
     <liEditer :ref="'li'+index" :item="item" @setItem="setItem"></liEditer>
   </li>
 </ul>

</div>
</template>

<script>
  import liEditer from './Vue04-a'
    export default {
        name: "Vue04",
        components:{
            liEditer:liEditer
        },
        data(){
            return{
                arr:[
                    {id:1,name:'c',age:20},
                    {id:2,name:'e',age:21},
                    {id:3,name:'g',age:22}
                ]
            }
        },
        methods:{
            setItem(value){
                // var item= this.arr.find(x=>x.id==value.id);
                // item.name=value.name;
                // item.age=value.age;
                console.log(this.$refs.li1)
            }
        }
    }
</script>

<style scoped>
li{
  display: flex;
}
</style>

Vue是一种流行的JavaScript框架,用于构建用户界面。在Vue中,父子组件之间传递数据是一种常见的需求。以下是一种常用的方法来实现父子组件之间的数据传递: 1. Props(属性):父组件可以通过props属性向子组件传递数据。在父组件中,通过在子组件标签上绑定属性的方式传递数据。在子组件中,可以通过props选项接收并使用这些数据。 父组件: ```html <template> <div> <child-component :message="parentMessage"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from parent component' }; } } </script> ``` 子组件: ```html <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ['message'] } </script> ``` 2. $emit(自定义事件):子组件可以通过$emit方法触发自定义事件,并将需要传递的数据作为参数传递给父组件。在父组件中,通过在子组件标签上监听自定义事件的方式接收数据。 父组件: ```html <template> <div> <child-component @child-event="handleChildEvent"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, methods: { handleChildEvent(data) { console.log(data); // 在这里处理子组件传递的数据 } } } </script> ``` 子组件: ```html <template> <div> <button @click="emitEvent">触发事件</button> </div> </template> <script> export default { methods: { emitEvent() { this.$emit('child-event', 'Hello from child component'); // 触发自定义事件,并传递数据给父组件 } } } </script> ``` 以上是Vue中实现父子组件之间传递数据的两种常用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值