<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”使用静态文件夹导入(我将它们复制到该文件夹)
控制台显示“无法找到”。
有人能帮我吗?
2条答案
按热度按时间1l5u6lss1#
我不想在这里完全回答你的问题,但我所知道的是,如果你使用'静态'文件夹来提供图像,你应该使用它而不是在你的网址中使用'静态'一词。例如:
应该是
然后从
我本可以发表评论,但我的声誉太低,无法发表评论,但足以提交答案。
jvlzgdj92#
如果它是静态的,你只需要像Raju提到的
/images/people
。另外,我推荐一个非常简单的解决方案:跳过jQuery,使用Vue包来完成这个任务。你会有一个更好的API和更少的bug。在这里尝试一个维护良好和良好匹配的包:https://github.com/vuejs/awesome-vue#select
jQuery太混乱了,进入了Vue的React方式,并且带来了大量的JS,因为Vue可以用它自己的API做得很好。