#javascript #vue.js #vuejs2 #vue-component
#javascript #vue.js #vuejs2 #vue-компонент
Вопрос:
Я пытаюсь реализовать простую галерею изображений в моем Vue.js приложение.
Это то, что я ищу:
Пользователь нажимает на эскиз, и справа отображается увеличенное изображение. Это код, который я сделал до сих пор:
<div class="col-md-6">
<div class="row" id="grid">
<div v-for="(picture, index) in pictures"
:key="picture.pk"
class="col-md-4 my-auto"
>
<div @click="picToShow= index">
<img class="img-thumbnail img-responsive" :src="picture.picture_1">
</div>
</div>
</div>
</div>
<div class="col-6 text-center my-auto">
<div v-for="(picture,index) in pictures"
:key="picture.pk"
class="col-md-4 my-auto"
>
<img v-show="pictToShow == index" :src="picture.picture_1">
</div>
</div>
Но когда я запускаю его, я получаю эту ошибку :
[Предупреждение Vue]: Свойство или метод «pictToShow» не определен в экземпляре, но на него ссылаются во время рендеринга. Убедитесь, что это свойство является реактивным либо в опции data, либо для компонентов на основе классов, инициализировав свойство. Смотрите:https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
У меня есть в моем <script>
:
data () {
return {
pictures: [],
picToShow: null,
}
},
Как я могу это исправить?
Комментарии:
1. Что-то пошло не так с моим ответом?
2. Я понимаю логику, но получаю
Error in render: "TypeError: Cannot read property 'picture_1' of undefined"
ошибку3. ах, извините, я забыл добавить условный рендеринг
<div v-if="picToShow" class="col-md-4 my-auto"> <img :src="pictures[picToShow].picture_1" /> </div>
4. Это работает, за исключением первого изображения в [картинки].
5. да, да, он вычисляется
0
как false, поэтому вам следует сделатьv-if="picToShow!==null"
Ответ №1:
Вы допускаете опечатку, добавляя лишнее t
в v-show="pictToShow == index"
, которое должно быть v-show="picToShow == index"
, но я вижу, что делать два цикла не очень хорошая практика, я рекомендую сохранить первый и использовать выбранный индекс для отображения его изображения :src="pictures[picToShow].picture_1"
:
<div class="col-md-6">
<div class="row" id="grid">
<div v-for="(picture, index) in pictures"
:key="picture.pk"
class="col-md-4 my-auto"
>
<div @click="picToShow= index">
<img class="img-thumbnail img-responsive" :src="picture.picture_1">
</div>
</div>
</div>
</div>
<div class="col-6 text-center my-auto">
<div v-if="picToShow!==null" class="col-md-4 my-auto">
<img :src="pictures[picToShow].picture_1" />
</div>
</div>