<template>
<div>
<SvgView class="sp-svg-styles"/>
</div>
</template>
<script>
export default{
props:['name'],
components:{
SvgView:require('./../Icons/'+this.name+'.svg')
}
}
</script>
Svg.vue?58b1:14 Uncaught TypeError: Cannot read property 'name' of undefined
at eval (Svg.vue?58b1:14)
at Module../node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/Layers/Svg.vue?vue&type=script&lang=js& (app.js:1022)
at __webpack_require__ (app.js:849)
at fn (app.js:151)
at eval (Svg.vue?c2e2:1)
at Module../src/components/Layers/Svg.vue?vue&type=script&lang=js& (app.js:2267)
at __webpack_require__ (app.js:849)
at fn (app.js:151)
at eval (Svg.vue?d6a3:1)
at Module../src/components/Layers/Svg.vue (app.js:2255)
require
, очевидно, исполняется* во время создания(декларации) экспортируемого объекта, задолго до того как этот объект попадёт в Vue и превратится в Vue-компонент.require
, очевидно, исполняется в глобальном контексте, в котором недоступен (какой-либо) this
.<template>
<div>
<component :is="SvgView" class="sp-svg-styles"/>
</div>
</template>
<script>
export default{
props:['name'],
computed: {
SvgView() {
return require('./../Icons/'+this.name+'.svg');
}
}
}
</script>
require
на самом деле работает на этапе компиляции, подготавливая и загружая в бандл все файлы по маске ./../Icons/*.svg
, а на этапе исполнения заменяется внутренней функцией, возвращающей значение по имени.