2016-11-08 15 views
15

मेरे पास एक ऐसा मामला है जहां में webpack वेब ऐप के साथ, मुझे गतिशील छवियां प्रदर्शित करने की आवश्यकता है। मैं img दिखाना चाहता हूं जहां छवियों का फ़ाइल नाम एक चर में संग्रहीत किया जाता है। वह चर computed संपत्ति है जो Vuex स्टोर चर लौटा रही है, जिसे beforeMount पर असीमित रूप से पॉप्युलेट किया जा रहा है।Vue.js गतिशील छवियां काम नहीं कर रही हैं

<div class="col-lg-2" v-for="pic in pics"> 
    <img v-bind:src="'../assets/' + pic + '.png'" v-bind:alt="pic"> 
</div> 

हालांकि यह पूरी तरह से काम करता है जब मैं सिर्फ कार्य करें:

<img src="../assets/dog.png" alt="dog"> 

मेरे मामले इस fiddle के समान है, लेकिन यहाँ यह img यूआरएल के साथ काम करता है, लेकिन वास्तविक फ़ाइल पथ के साथ खान में, यह नहीं है काम।

इसे करने का सही तरीका क्या होना चाहिए?

<div class="col-lg-2" v-for="(pic, index) in pics"> 
    <img :src="getPic(index)" v-bind:alt="pic"> 
</div> 

यहाँ:

methods: { 
    getPic(index) { 
    return '../assets/' + this.pics[index] + '.png'; 
    } 
} 

फिर अपने v-for अंदर निम्न कार्य करें:

उत्तर

20

मैं कोड निम्नलिखित

getImgUrl(pet) { 
    var images = require.context('../assets/', false, /\.png$/) 
    return images('./' + pet + ".png") 
    } 

द्वारा और HTML में इस काम की है:

<div class="col-lg-2" v-for="pic in pics"> 
    <img :src="getImgUrl(pic)" v-bind:alt="pic"> 
</div> 

लेकिन यकीन है कि क्यों मेरे पहले दृष्टिकोण काम नहीं किया नहीं।

+0

निकमेसिंग के अनुसार: "v-bind के अंदर अभिव्यक्ति रनटाइम पर निष्पादित की जाती है, संकलन समय पर वेबपैक उपनाम।" https://github.com/vuejs/vue-loader/issues/896 – antoine

6

आपका सबसे अच्छा शर्त सिर्फ एक सरल विधि का उपयोग करने दिए गए इंडेक्स पर छवि के लिए सही स्ट्रिंग का निर्माण करना है जेएसफ़िल्ड (जाहिर है कि छवियां नहीं दिखती हैं, इसलिए मैंने छवि के बगल में छवि src डाली है):

https://jsfiddle.net/q2rzssxr/

+0

धन्यवाद, लेकिन मैंने यह भी कोशिश की, मेरे लिए काम नहीं किया। – Saurabh

+0

वास्तव में? यहां वास्तविक छवियों के साथ एक उदाहरण दिया गया है जो ठीक काम करता प्रतीत होता है: https://jsfiddle.net/q2rzssxr/1/ –

+0

यह सुनिश्चित नहीं है कि, मैंने इसे किसी अन्य उत्तर में लिखे गए कोड से क्यों काम किया है। आप उदाहरण इस समारोह के बिना भी काम करते हैं, यहां देखें: https://jsfiddle.net/9a6Lg2vd/1/ – Saurabh

0

यहां एक शॉर्टलैंड है जिसका उपयोग वेबपैक करेगा, इसलिए आपको require.context का उपयोग करने की आवश्यकता नहीं है।

HTML:

<div class="col-lg-2" v-for="pic in pics"> 
    <img :src="getImgUrl(pic)" v-bind:alt="pic"> 
</div> 

Vue विधि:

getImgUrl(pic) { 
    return require('../assets/'+pic) 
} 

और मुझे लगता है कि here में पहले 2 पैराग्राफ स्पष्टीकरण दें कि इस काम करता है? अच्छी तरह से।

कृपया ध्यान दें कि अपने पालतू चित्रों को एक उपनिर्देशिका के अंदर रखना, यह आपकी सभी अन्य छवि संपत्तियों के साथ लॉबिंग करने के बजाय एक अच्छा विचार है। इस तरह: ./assets/pets/

संबंधित मुद्दे