父组件

<template>  <div class="news-component">    <p class="title">新闻页</p>    <div class="news-detail-content">    子组件:      <news-detail :newList="newList" @addNew="receiveAddNew"  @delet="receiveDeleteNew"></news-detail>    </div>  </div></template><script lang="ts">import { defineComponent, reactive } from 'vue';import NewsDetail from '@/components/newDetail.vue';// 引入子组件export default defineComponent({  name: 'News',  components: {    'news-detail': NewsDetail,  },  setup(props) {    // 创立一个响应式的新闻列表    const newList = reactive([      { title: '新闻1', id: 'xw1' },      { title: '新闻2', id: 'xw2' },      { title: '新闻3', id: 'xw3' },    ]);     return {      newList,    };  },  methods: {    /**     * 接管(子组件)新增新闻数据     * @param value 新增的新闻数据对象     */    receiveAddNew(value: any) {      this.newList.push(value);    },    /**     * 接管(子组件)删除新闻数据     * @param index 被删除新闻的下标     */    receiveDeleteNew(index: number) {      this.newList.splice(index, 1);    },  },});</script><style lang="less" scoped>@import '@/assets/css/variable.less';.news-component {  width: 100%;  height: 100%;  .title {    font-size: 40px;    text-align: center;  }  .news-detail-content {    width: 90%;    height: 80%;    margin: 0 auto;  }}</style>

子组件

<template>  <div class="news-component">    <p>新闻详情组件</p>    <br />    渲染父组件传过来的数据:    <p class="item-new"          v-for="(item, index) in newList"           :key="item.id">              {{ item.title }}---{{ item.id }}               <van-button type="warning" @click="deletNews(index)"> 删除 </van-button>    </p>    <br />    <van-button type="info" @click="addNews">增加一条新闻</van-button>  </div></template><script lang="ts">import { defineComponent } from 'vue'; export default defineComponent({  name: 'NewsDetail',  props: ['newList'],  setup(props, { emit }) {        let addNews = () => {      emit('addNew', { title: `新闻${props.newList.length + 1}`, id: `xw${props.newList.length + 1}` });    };    let deletNews = (index: number) => {      emit('delet', index);    };    return {      addNews,      deletNews,    };  }});</script><style lang="less" scoped>@import '@/assets/css/variable.less';.news-component {  width: 100%;  height: 100%;  background: rgba(201, 194, 194, 0.6);  font-size: @default-fontSize;  overflow: auto;  .item-new {    margin: 20px 0;  }}</style>