如何使用Nuxt+jQuery脚本动态导入图片

c7rzv4ha  于 2022-11-03  发布在  jQuery
关注(0)|答案(2)|浏览(378)
<template>
    <div>
        <select ref='select'>
            <slot></slot>
        </select>
    </div>
</template>

<script>
import Vue from "vue"
export default {
    name: "VueSelect",
    props: ['options', 'value'],

    mounted: function () {
        var vm = this;
        $(this.$refs.select)
            .select2({
                data: this.options,
                tags: true,
                theme: "bootstrap",
                createTag: function (params) {
                    return {
                        id: params.term,
                        text: params.term,
                        newOption: true
                    }
                },
                templateResult: function (state) {
                    console.log(state)
                    if (!state.id) {
                        return state.text;
                    }
                    var baseUrl = "/dist/peoples";
                    var imgUrl = baseUrl + '/' + state.element.value.toLowerCase() + '.png'

                    var $state = $(
                        '<span><img src="'+imgUrl+'" class="img-flag" /> ' + state.text + '</span>'
                    );
                    return $state;
                }
            })
            .on('change', function (ev, args) {
                if (!(args && "ignore" in args)) {
                    vm.$emit('input', $(this).val());
                    vm.$emit("change_value",$(this).val())
                }
            });

        Vue.nextTick(() => {
            $(this.$refs.select)
                .val(this.value)
                .trigger('change', { ignore: true })
        });
    },
    methods: {
        getImageUrl: function(src) {
            return require("~/assets"+src);
        }
    },  
    watch: {
        value: function (value, oldValue) {
            // update value
            $(this.$refs.select)
                .val(this.value)
                .trigger('change', { ignore: true });
        },
        options: function (options) {
            // update options
            $(this.$refs.select).select2({ data: options })
        }
    },
    destroyed: function () {
        $(this.$refs.select).off().select2('destroy')
    }
}

</script>

<style>
.select2-container--default {
    min-width: 100%;
}
</style>

这是我的Vue + Select 2组件。
问题是我不能在jQuery脚本中动态导入图像。

var baseUrl = "~/assets/images/peoples";
 var imgUrl = baseUrl + '/' + state.element.value.toLowerCase() + '.png'

根据Nuxt动态导入指南,我尝试了如下方法

var baseUrl = "~/assets/images/peoples";
 var imgUrl = require(baseUrl + '/' + state.element.value.toLowerCase() + '.png')

但它失败了。
控制台显示“无法找到模块“~/assets/images/peoples/10.png”“
此外,我无法使用“var baseUrl =“/static/images/people”使用静态文件夹导入(我将它们复制到该文件夹)
控制台显示“无法找到”。
有人能帮我吗?

1l5u6lss

1l5u6lss1#

我不想在这里完全回答你的问题,但我所知道的是,如果你使用'静态'文件夹来提供图像,你应该使用它而不是在你的网址中使用'静态'一词。例如:

var baseUrl = "/static/images/people"

应该是

var baseUrl = "/images/people"

然后从

localhost:3000/images/people/10.png

我本可以发表评论,但我的声誉太低,无法发表评论,但足以提交答案。

jvlzgdj9

jvlzgdj92#

如果它是静态的,你只需要像Raju提到的/images/people。另外,我推荐一个非常简单的解决方案:跳过jQuery,使用Vue包来完成这个任务。你会有一个更好的API和更少的bug。
在这里尝试一个维护良好和良好匹配的包:https://github.com/vuejs/awesome-vue#select
jQuery太混乱了,进入了Vue的React方式,并且带来了大量的JS,因为Vue可以用它自己的API做得很好。

相关问题