vuejs-子组件数据交换

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

1、.sync属性

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

子组件向上弹射事件给父组件时,事件名必须为格式update:props属性名

父组件

<template>

<div id="app">

    // 注意点一、:show后跟修饰符.sync

    // 等同于<my-componen :show="child" @update:show="val => child= val" />

    <my-component :show.sync='child' />

</div>

</template>

<script>

export default {

    data(): {

        return {child: false}

    }

}

</script>

子组件

<template>

    <h3>{{show}}</h3>

    <button @click="eventOn">子组件事件</button>

</template>

<script>

export default {

  props: {

      show: { type: Boolean, default: false}

    } ,

    methods: {

        eventOn() {

            // 注意二、事件名必须为update:属性名

            // 更改prop中的属性show的属性值,同时更新父组件中中child的属性值

            this.$emit('update:show', false);

        }

    }

}

</script>

2、v-model应用

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

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

父组件

<template>

<div id="app">

  // 等同于<my-componen :value="child" @input="val => child= val" />

    <my-component :value='child' />

</div>

</template>

<script>

export default {

    data(): {

        return {child: false}

    }

}

</script>

子组件

<template>

    <h3>{{value}}</h3>

    <button @click="eventOpt">子组件事件</button>

</template>

<script>

export default {

  props: {

    // 注意点一、属性名必须为value

      value: { type: Boolean, default: false}

    } ,

    methods: {

        eventOpt() {

            // 注意二、事件名必须为input

            // 更改prop中的属性value的属性值,同时更新父组件中中child的属性值

            this.$emit('input', false);

        }

    }

}

</script>

比较

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容