vuejs テンプレート構文内のimgタグが表示されないとき
vueのテンプレート構文内に存在するimg
タグsrc
プロパティに変数を渡しても画像が描画されないときの対応方法
状況
- 画像ファイルは
./src/assets/logo.png
に配置
下記のソースは画像が正しく描画されません。
// NG <template> <img :src="imagePath" /> </template> <script> export default { name: 'AppCircleIcon', data() { return { imagePath: '@/assets/logo.png', }; }, }; </script>
下記のソースは画像が正しく描画されます。
// OK <template> <img class="circle-icon" src="@/assets/logo.png" /> </template> <script> export default { name: 'AppCircleIcon', }; </script>
原因
タグの中で文字列として静的に記述されている場合と、変数から動的に記述する場合では参照方法が異なるため。
詳細
対応
1.画像ファイルをモジュールとして扱う
(この対応では親から子にパスをprops
で渡す場合などで対応できない)
// OK <template> <img :src="imagePath" /> </template> <script> import defaultImg from '@/assets/logo.png'; export default { name: 'AppCircleIcon', data() { return { imagePath: defaultImg, }; }, }; </script>
2.画像ファイルを配置する場所を変更する
./public/img/
フォルダに画像ファイルを配置
// ./public/img/logo.pngが存在する場合 OK <template> <img :src="imagePath" /> </template> <script> export default { name: 'AppCircleIcon', props: { imagePath: { type: String, default: './img/logo.png', }, }, }; </script>
この場合ではprops
に渡す参照先のパスはpublic
フォルダ限定