Vue javascript içinde statik varlıklara nasıl başvurulur


99

Vue javascript içindeki resimler gibi statik varlıklara başvurmak için doğru url'yi arıyorum.

Örneğin, özel bir simge görüntüsü kullanarak bir broşür işaretleyici oluşturuyorum ve birkaç url denedim, ancak hepsi bir döndürüyor 404 (Not Found):

Ana.vue:

var icon = L.icon({
    iconUrl: './assets/img.png',
    iconSize:     [25, 25],
    iconAnchor:   [12, 12]
});

Görüntüleri varlıklar klasörüne ve statik klasöre koymayı şanssız bir şekilde denedim. Vue'ya bu resimleri bir şekilde yüklemesini söylemem gerekiyor mu?


web paketi? Bu genellikle bir görüntünün dahil edilip edilmediğini bilmek ister, böylece pakete konulur. Diğer paket sistemleri, görüntü sunucunuza dağıtıldığı sürece muhtemelen umursamıyor
akatakritos

Yanıtlar:


168

Şablondaki resimlere başvurmak isteyenler için, doğrudan '@' kullanarak resimlere başvurabilirsiniz.

Misal:

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

2
... src / assets / images klasörünüz olduğu için. Kutunun dışında, vue-loader varlıkları src / .. / ... 'den kopyalar ve /../ .. oluşturmak için VEYA daha küçük resimleri data.image / png olarak otomatik olarak satır içine alır.
Johanness

10
benim için işe yaramadı: This dependency was not found:* @/assets/more-ico.svg. To install it, you can run: npm install --save @/assets/more-ico.svg...
Jakub Strebeyko

2
Benim için de işe yaramadı, ama ..... sonra yanlış dosya adını kullandığımı gördüm; p mükemmel çalışıyor!
Larzan

7
Çalışıyor, ancak açık template, css background-img özelliğinde kullanmak istiyorsanız ../../assets/bg/login.svg, görüntü ile varlıklar klasörüne benzer bir şey deneyin
calebeaires

5
Teşekkür ederim. Statik varlıklarla ilgili vue belgeleri gereksiz yere ayrıntılıdır ve bu birincil kullanım durumunu neredeyse sayfanın alt kısmına, küçük bir madde işaretine gömer.
Our_Benefactors

70

Bir Vue normal kurulumunda /assetssunulmaz.

Bunun src="data:image/png;base64,iVBORw0K...YII="yerine görüntüler dizelere dönüşür.


JavaScript içinden kullanmak: require()

Görüntüleri JS kodundan almak için require('../assets.myImage.png'). Yol göreceli olmalıdır (aşağıya bakın).

Yani kodunuz şöyle olacaktır:

var icon = L.icon({
    iconUrl: require('./assets/img.png'),   // was iconUrl: './assets/img.png',
//  iconUrl: require('@/assets/img.png'), // use @ as alternative, depending on the path
    // ...
});

Göreli yol kullan

Örneğin, aşağıdaki klasör yapısına sahip olduğunuzu varsayalım:

- src
  +- assets
     - myImage.png
  +- components
     - MyComponent.vue

MyComponent.vueİçindeki görüntüye başvurmak istiyorsanız , yol olmalıdır../assets/myImage.png


İşte onu çalışırken gösteren bir DEMO KODLARI VE KUTUSU .


2
Uygulamamı vue-cli ile kurduktan sonra bu teknik benim için çalıştı. Kod sanal alanı çok yardımcı oldu. Cevap, kod sanal alanı kadar net değil.
revdrjrr

require('./assets/img.png')benim bileşen seçeneklerimde işe yaramadı,. @: ile require('@/assets/img.png').
Michael

23

Daha iyi bir çözüm olurdu

@ Acdcjunior'un cevabına bazı iyi uygulamalar ve güvenlik eklemek, @yerine kullanmak./

JavaScript'te

require("@/assets/images/user-img-placeholder.png")

JSX Şablonunda

<img src="@/assets/images/user-img-placeholder.png"/>

kullanarak @puan srcdizininde.

~Proje köküne yönelik noktaları kullanmak , bu da node_modulesve diğer kök düzeyindeki kaynaklara erişimi kolaylaştırır


Ya bir resim değil de bir metin dosyası veya csv ise? Ve sadece yolu / url'yi almak mı istiyorsunuz?
trainoasis

22

Webpack'in doğru varlık yollarını döndürmesi için, dosya yükleyici tarafından işlenecek ve çözülen URL'yi döndüren gereksinim ('./ göreli / yol / dosya.jpg'ye') kullanmanız gerekir.

computed: {
  iconUrl () {
    return require('./assets/img.png')
    // The path could be '../assets/img.png', etc., which depends on where your vue file is
  }
}

Bkz. VueJS şablonları - Statik Varlıkları İşleme


8

Komut dosyası etiketini açtıktan hemen sonra, import someImage from '../assets/someImage.png' onu bir simge url'si için ekleyin ve kullanıniconUrl: someImage


1
Bu, içe aktarıma '@' karakterini dahil ederken benim için iyi çalıştı.
vab2048

2

Hangi sistemi kullanıyorsun? Web paketi mi? Vue yükleyici?

Burada sadece beyin fırtınası yapacağım ...

.Png bir JavaScript dosyası olmadığından, Webpack'i bunları işlemek için dosya yükleyici veya url yükleyici kullanacak şekilde yapılandırmanız gerekir. Vue-cli ile inşa edilen proje de bunu sizin için yapılandırdı.

Gibi webpack.conf.jsiyi yapılandırılmış olup olmadığını görmek için bir göz atabilirsiniz.

...
    {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
        }
      },
...

/assets gruplama sırasında web paketi tarafından işlenen dosyalar içindir - bunun için javascript kodunuzda bir yerde referans gösterilmesi gerekir.

Diğer varlıklar yerleştirilebilir /static, bu klasörün içeriği /distdaha sonra olduğu gibi kopyalanacaktır .

Değiştirmeyi denemenizi tavsiye ederim:

iconUrl: './assets/img.png'

-e

iconUrl: './dist/img.png'

Resmi belgeleri buradan okuyabilirsiniz: https://vue-loader.vuejs.org/en/configurations/asset-url.html

Umarım size yardımcı olur!


Hangi sistemi kullandığımdan veya manuel olarak eklemem gerekip gerekmediğinden emin değilim. ./Dist URL'sini denedim ve şansım olmadı
JBaczuk

0

src/assetsGörüntünüzü oraya yerleştirebileceğiniz gibi Vue CLI tarafından oluşturulan klasörlerin varsayılan yapısına sahip olmak ve buna aşağıdaki <img src="../src/assets/img/logo.png">gibi HTML'den de başvurabilirsiniz (dağıtımda herhangi bir değişiklik olmadan otomatik olarak çalışır).


0

Vue ile typcript kullanıyorum, ama bu şekilde başladım

<template><div><img :src="MyImage" /></div></template>
<script lang="ts">
    import { Vue } from 'vue-property-decorator';
    export default class MyPage extends Vue {
            MyImage = "../assets/images/myImage.png";
        }
</script>

0

bu nihayet benim için çalıştı, görüntü destek olarak geçti:

<img :src="require(`../../assets/${image}.svg`)">

-3

Elbette src="@/assets/images/x.jpgişe yarıyor, ancak daha iyi bir yol: src="~assets/images/x.jpg


2
Bir açıklama yapabilir misin?
JBaczuk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.