#vue.js #vuejs2 #vue-component #vue-router
#vue.js #vuejs2 #vue-компонент #vue-маршрутизатор
Вопрос:
У меня есть новый vue
сайт, который был создан с использованием vue-cli
, но мое изображение вообще не загружается и не может понять, почему
<router-link class="logo" to="/" tag="img" src="@/assets/logo.png" style="cursor: pointer"/>
У меня есть image
сохраненные в assets
папке
консоль
Но если я использую приведенное ниже, оно отображается
<img src="@/assets/logo.png" />
консоль
Ответ №1:
В vue cli изображения рассматриваются как модули, поэтому их следует импортировать или запрашивать :
<router-link :src="require(@/assets/logo.png)" style="cursor: pointer" class="logo" to="/" tag="img" />
Ответ №2:
Насколько я вижу, <router-link>
у него нет src
поддержки: https://router.vuejs.org/api/#router-link-props
Комментарии:
1.Отображается
router-link
какHTML
img
, поэтомуsrc
допустимо2. в соответствии с этим : иногда мы хотим, чтобы <router-link> отображался как другой тег, например <li> . Затем мы можем использовать tag prop, чтобы указать, какой тег отображать, и он все равно будет прослушивать события щелчка для навигации
3. Важно, что
router-link
у него нетsrc
prop: поскольку он сам не знает оsrc
prop, он будет передавать значение как есть. Это не похоже на то, что Vue просматривает все атрибуты везде, чтобы увидеть, похожи ли они на пути, которые следует переписать.
Ответ №3:
Когда вы используете Vue с Webpack (почти всегда), Vue-loader используется для компиляции ваших .vue
файлов. При компиляции <template>
части файла он ищет некоторые общие теги, такие как <img>
и способен преобразовывать содержимое src
тегов в запросы модуля Webpack
Таким образом, ваш <img src="@/assets/logo.png" />
во время компиляции преобразуется (по сути) в <img :src="require('@/assets/logo.png')" />
Смотрите ссылку выше для получения комбинаций тегов / атрибутов, преобразованных по умолчанию. Если нужной вам комбинации там нет (как в вашем случае), вы можете либо настроить Vue-loader (transformAssetUrls), как это делают многие популярные библиотеки пользовательского интерфейса (например, Vuetify для его v-img
компонента), либо вы должны сделать это вручную, как предложил @Boussadjra Brahim (с пропущенными кавычками):
<router-link :src="require('@/assets/logo.png')" to="/" tag="img" />