У меня возникла проблема с использованием внешних данных в свойстве Vue data
.
Рассмотрим следующий фрагмент из моего компонента:
export default {
data() {
return {
gallery: require('core-js/support/some-page-gallery.json')
}
},
created() {
// Prepare the images for the gallery
this._buildImageURLs();
},
methods: {
/**
* Build the image urls for the gallery.
*
* @return void
*/
_buildImageURLs() {
this.gallery.forEach(image => {
Object.entries(image.images).forEach(([key, source]) => {
image.images[key] = this.$staticAsset(`/assets/images/misc/${source}`);
});
});
}
}
}
Проблема с вышеизложенным заключается в том, что изменение this.gallery
, по-видимому, изменяет исходно импортированный массив.
Это приводит к следующему:
- При загрузке страницы
image.images[0]
равноexample.com/assets/images/misc/example.jpg
- При переходе на другую страницу, а затем обратно на нее
image.images[0]
равноexample.com/assets/images/misc/example.com/assets/images/misc/example.jpg
.
Каков наилучший способ require
моего файла JSON в качестве клона, а не в качестве эталона? Предположим, что здесь что-то не так...
В качестве альтернативы, есть ли лучший способ импортировать данные в мой компонент?
Что я пробовал?
Я также пытался использовать import
, но это приводит к точно такому же результату.
Кроме того, я думал о передаче this.gallery
в качестве параметра this._buildImageURLs()
, и я вполне уверен, что смогу заставить это работать, но я сомневаюсь, так как это не похоже на правильный способ сделать это.
Обновлять
На всякий случай вышеизложенное не ясно; проблема, с которой я столкнулся, заключается в том, что this.gallery
действует как ссылка на импортированный файл. В результате импортированные данные сохраняют свое отредактированное состояние во всем моем приложении.
Когда я последний раз на странице, метод _buildImageURLs
корректно изменяет данные. Но если я уйду, а затем вернусь на страницу, измененные данные будут изменены снова, что приведет к дублированию изменений.