85 votes

Comment importer et utiliser une image dans un composant Vue à fichier unique ?

Je pense que cela devrait être simple, mais je rencontre quelques difficultés pour importer et utiliser une image dans un composant Vue à fichier unique. Quelqu'un peut-il m'aider à le faire ? Voici mon extrait de code :

<template lang="html">
  <img src="zapierLogo" />
</template>

<script>
import zapierLogo from 'images/zapier_logo.svg'

export default {
}
</script>

<style lang="css">
</style>

J'ai essayé d'utiliser :src , src="{{ zapierLogo }}" Mais rien ne semble fonctionner. Je n'ai pas trouvé d'exemple non plus. Une aide ?

0 votes

Il suffit d'utiliser src='images/zapier_logo.svg' s'il s'agit d'une image svg statique

0 votes

Obtenez-vous une erreur dans votre console ?

144voto

papey Points 1642

Aussi simple que :

<template>
  <div id="app">
    <img src="./assets/logo.png">
  </div>
</template>

<script>
export default {
}
</script>

<style lang="scss">
</style> 

Tiré du projet généré par vue cli.

Si vous voulez utiliser votre image comme un module, n'oubliez pas de lier les données à votre composant Vuejs.

<template>
  <div id="app">
    <img :src="image" />
  </div>
</template>

<script>
import image from "./assets/logo.png"

export default {
    data: function () {
        return {
            image: image
        }
    }
}
</script>

<style lang="scss">
</style> 

Et une version plus courte :

<template>
  <div id="app">
    <img :src="require('./assets/logo.png')" />
  </div>
</template>

<script>
export default {
}
</script>

<style lang="scss">
</style>

5 votes

Vous pouvez également inclure, image: require('path/to/file') si vous souhaitez l'inclure dans les données.

4 votes

Je pense que nous devrions également mentionner l'utilisation du tilde(~)avant l'url. Au cas où vous n'utiliseriez pas require. src="~src/assets/img/me.png"

13 votes

:src="require('@/assets/image.png')" Ça marche pour moi.

22voto

li x Points 2165

Si vous souhaitez les charger par webpack, vous pouvez simplement utiliser :src='require('path/to/file')' Veillez à utiliser : sinon il n'exécutera pas l'instruction require comme Javascript.

0 votes

Alors <img :src="require('@/assets/image.png')"> ? Cela ne fonctionne pas pour moi. Il se plaint d'une dépendance non trouvée.

0 votes

@Pithikos Il y a beaucoup de raisons pour lesquelles vous pouvez obtenir cette erreur, pouvez-vous en dire plus ou peut-être poster une question et je peux essayer de déboguer.

0 votes

Url-loader vous permet de mettre en ligne de manière conditionnelle un fichier en tant qu'URL de données en base-64 si elles sont plus petites qu'un seuil donné. Cela peut réduire le nombre de requêtes HTTP pour des fichiers triviaux. Si le fichier est plus grand que le seuil, il revient automatiquement à file-loader. - Si vous n'utilisez pas webpack pour charger vos images, vous ne bénéficierez pas de cet avantage ou des autres avantages mentionnés ici : vue-loader.vuejs.org/guide/asset-url.html#transform-rules @akauppi

8voto

Simdi Points 87

J'ai rencontré ce problème récemment, et j'utilise Typescript. Si vous utilisez Typescript comme moi, vous devez importer les actifs comme suit :

<img src="@/assets/images/logo.png" alt="">

0 votes

Bien que cela fonctionne, vous ne tirez pas profit de webpack dans ce cas.

0 votes

Je n'utilise pas Typescript mais je dois utiliser votre solution. Merci.

3voto

Vous pouvez également utiliser le raccourci Racine comme suit

  <template>
   <div class="container">
    <h1>Recipes</h1>
      <img src="@/assets/burger.jpg" />
   </div>
  </template>

Bien que ce soit Nuxt, il devrait être le même avec Vue CLI.

2voto

JustRaman Points 895

Les deux fonctionnent pour moi en JavaScript et TypeScript.

<img src="@/assets/images/logo.png" alt=""> 

ou

 <img src="./assets/images/logo.png" alt="">

1 votes

Bien que cela fonctionne, vous ne tirez pas profit de webpack dans ce cas. De plus, cette src="./assets/images/logo.png" est déconseillé en pratique car, contrairement à la statique, vous ne pouvez pas garantir comment les éléments du répertoire des actifs seront regroupés lors de la construction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X