v-model解决父子组件之间的通信问题:(推荐)

v-model解决父子组件之间的通信问题:(推荐)

应用场景:当你给子组件提供的数据既要使用,还要修改,这个时候可以使用v-model简化
v-model干了两件事情:
1.通过value把article.cover.images[index]传给了子组件
:value=“article.cover.images[index]”
2.默认监听了input事件,当这个事件触发的时候,你传1的时候,就会把你绑的这个article.cover.images[index]改为1;你传2的时候,就会把article.cover.images[index]改为2
@input=“article.cover.images[index]=事件参数”

代码演示:

父组件:

v-model="article.cover.images[index]"在父组件中绑定好你要交互的数据
<template v-if="article.cover.type > 0">
  <upload-cover v-for="(cover, index) in article.cover.type" :key="cover" v-model="article.cover.images[index]"
    />
</template>

子组件:把数据拿回来,然后在渲染到组件中

子组件中有哪些代码
此时父组件传给子组件的数据就用value代替即可,props中绑定的数据也是value
this.$emit(‘input’, res.data.data.url)此时的事件名称改为input
<div class="cover-wrap">
      <img
        ref="cover-image"
        alt=""
        class="cover-image"
        :src="value"
      />
    </div>
    
export default {
  props: ['value']
  
  
this.$emit('input', res.data.data.url)

注意点:

当绑定好了数据之后,发生异步数据报错的问题,这是因为子组件的渲染速度比父组件提供数据的速度快导致的,可以给子组件加一个v-if,比如这里的v-if=“channel”
<template>
  <div>
    <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad" v-if="channel">
      <van-cell v-for="item in list" :key="item.art_id" :title="item.title" />
    </van-list>
  </div>
</template>

<script>
import { getArticleRec } from '@/api/article.js'
export default {
  name: 'ArticleList',
  components: {},
  data () {
    return {
      list: [],
      loading: false,
      finished: false,
      pre_timestamp: null
    }
  },
  props: {
    channel: {
      type: Object,
      required: true
    }
  },
  computed: {},
  watch: {},
  created () {},
  mounted () {},
  methods: {
    onLoad () {
      getArticleRec({ channel_id: this.channel.id, timestamp: 189337750000, with_top: 1 }).then(res => {
        this.loading = false
        console.log(res)
        this.list.push(...res.data.data.results)
        this.pre_timestamp = res.data.data.pre_timestamp
      })
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Realistic-er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值