如何发出 v-for 值?

How to emit v-for value?

我正在尝试将我的 v-for 值(城市)发送到父组件。

<ul class="cards">
  <li v-for="city in cities" :key="city">
    <span  @click="$emit('update-city', city">
      <p @click="$emit('update-toggle')">{{item}}</p>
    </span>
  </li>
</ul>

父组件是这样的

<template>
<span @update-city ="updatedCity = city">
    <vertical-slider @update-toggle ="toggled= !toggled"  :cities="citiesArray" v-if="toggled">
    </vertical-slider>
  </span>
  
  <p>{{city}}</p>
</template>

<script>
  data(){
    return{
      toggled: false,
      updatedCity: "city",
      citiesArray[City1, City2, City3]
  }
</script>

切换事件工作正常,我的城市也得到渲染。尽管尝试了多种组合,但我似乎无法将城市名称传递给我的父组件。

这应该可以解决问题。

index.vue

<template>
  <div>
    Updated city:
    <pre>{{ updatedCity }}</pre>
    <VerticalSlider
      v-if="toggled"
      :cities="citiesArray"
      @update-city="updatedCity = $event"
      @update-toggle="toggled = !toggled"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      toggled: true,
      updatedCity: { id: 99, name: 'city' },
      citiesArray: [
        { id: 1, name: 'New York' },
        { id: 2, name: 'Paris' },
        { id: 3, name: 'London' },
        { id: 4, name: 'Istanbul' },
        { id: 5, name: 'Berlin' },
        { id: 6, name: 'Barcelona' },
        { id: 7, name: 'Rome' },
        { id: 8, name: 'Amsterdam' },
        { id: 9, name: 'Munich' },
        { id: 10, name: 'Prague' },
      ],
    }
  },
}
</script>

VerticalSlider.vue

<template>
  <ul class="cards">
    <li v-for="city in cities" :key="city.id">
      <span @click="$emit('update-toggle')">
        <p @click="$emit('update-city', city)">{{ city }}</p>
      </span>
    </li>
  </ul>
</template>

<script>
export default {
  name: 'VerticalSlider',
  props: {
    cities: {
      type: Array,
      default: () => [],
    },
  },
}
</script>