質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Q&A

解決済

1回答

1865閲覧

vueで画像が表示されない

masaya9460

総合スコア6

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

0グッド

0クリップ

投稿2020/04/18 05:55

前提・実現したいこと

vueでスライドショーを作成したいのですが、image.jpgをdataで渡したものが表示されず困っています。

発生している問題・エラーメッセージ

Error in render: "TypeError: Cannot read property 'url' of undefined"

該当のソースコード

Slider

1<template> 2 <div class="slider"> 3 <Slides :image="images[0]"/> 4 </div> 5</template> 6 7<script> 8import Slides from './Slides.vue'; 9 10export default { 11 components: { 12 Slides 13 }, 14 data(){ 15 return{ 16 images : [ 17 { 18 id: "0", 19 url: require("../assets/image1.jpg"), 20 title: "どうも" 21 }, 22 { 23 id: "1", 24 url: require("../assets/image2.jpg"), 25 title: "こんにちは" 26 }, 27 { 28 id: "2", 29 url: require("../assets/image3.jpg"), 30 title: "どうもどうも" 31 } 32 ] 33 } 34 } 35} 36</script> 37

Slides

1<template> 2 <div class="slides"> 3 {{ image.url }} 4 <h1>slides</h1> 5 <div class="slideImage" :style="setBackgroundImage()"> 6 7 </div> 8 </div> 9</template> 10 11<script> 12export default { 13 props: ["image"], 14 computed:{ 15 setBackgroundImage(){ 16 return {backgroundImage : "url("+this.images.url+")"}; 17 } 18 } 19} 20</script> 21 22<style> 23.slideImage{ 24 height: 100vh; 25 width: 100%; 26 background-position: center; 27 background-repeat: no-repeat; 28 background-size: cover; 29}

試したこと

styleでBackgroundImageを一つだけ画像表示はできたのですが、
配列にしてデータを渡して表示させることが出来ませんでした。
前提・実現したいこと

vueでスライドショーを作成したいのですが、image.jpgをdataで渡したものが表示されず困っています。

発生している問題・エラーメッセージ

Error in render: "TypeError: Cannot read property 'url' of undefined"

該当のソースコード

Slider

1<template> 2 <div class="slider"> 3 <Slides :image="images[0]"/> 4 </div> 5</template> 6 7<script> 8import Slides from './Slides.vue'; 9 10export default { 11 components: { 12 Slides 13 }, 14 data(){ 15 return{ 16 images : [ 17 { 18 id: "0", 19 url: require("../assets/image1.jpg"), 20 title: "どうも" 21 }, 22 { 23 id: "1", 24 url: require("../assets/image2.jpg"), 25 title: "こんにちは" 26 }, 27 { 28 id: "2", 29 url: require("../assets/image3.jpg"), 30 title: "どうもどうも" 31 } 32 ] 33 } 34 } 35} 36</script> 37

Slides

1<template> 2 <div class="slides"> 3 {{ image.url }} 4 <h1>slides</h1> 5 <div class="slideImage" :style="setBackgroundImage()"> 6 7 </div> 8 </div> 9</template> 10 11<script> 12export default { 13 props: ["image"], 14 computed:{ 15 setBackgroundImage(){ 16 return {backgroundImage : "url("+this.images.url+")"}; 17 } 18 } 19} 20</script> 21 22<style> 23.slideImage{ 24 height: 100vh; 25 width: 100%; 26 background-position: center; 27 background-repeat: no-repeat; 28 background-size: cover; 29}

試したこと

styleでBackgroundImageを一つだけ画像表示はできたのですが、
配列にしてデータを渡して表示させることが出来ませんでした。
こちら解決方法をご教授頂けたら幸いです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Vueでは画像URLをrequire()してあげないと表示されないので、それが原因だと思います。

こんな感じで表示できたので参考にしてください

vue

1<template> 2 <div> 3 <h1>slides</h1> 4 <div 5 class="slideImage" 6 :style="this.setBackgroundImage" 7 /> 8 </div> 9</template> 10<script> 11export default { 12 computed: { 13 setBackgroundImage() { 14 return { backgroundImage: 'url(' + require('@/img/test.jpg') + ')' } 15 } 16 } 17} 18</script> 19<style> 20.slideImage { 21 height: 100vh; 22 width: 100%; 23 background-position: center; 24 background-repeat: no-repeat; 25 background-size: cover; 26} 27</style> 28

【追記】
すみません、いろいろ勘違いしていました。

①エラーの件
setBackgroundImageのところ、this.image.urlに直してあげてください。

vue

1// 【元のコード】 2setBackgroundImage(){ 3 return {backgroundImage : "url("+this.images.url+")"}; 4 } 5 6// 【正しいコード】 7setBackgroundImage(){ 8 return {backgroundImage : "url("+this.image.url+")"}; 9 }

②computedを呼ぶ時は this.computedmethod で呼び出してあげてください

vue

1 2<-- 元のコード --> 3<div class="slideImage" :style="setBackgroundImage()"> 4 5<-- 正しいコード --> 6<div class="slideImage" :style="setBackgroundImage">

<div>の高さがない
イメージ画像が現れない原因はイメージを設定しているdivに高さがうまく設定できてないからだと思います
試しに<div>hello</div>とかやってみると背景に画像の一部が現れました。
style側であてたものにsetBackgroundImageが上書きしてしまっているのかもしれませんので、そちらであててみてはいかがでしょう。

vue

1 // 例 2 setBackgroundImage() { 3 return { backgroundImage: 'url(' + this.image.url + ')', height:"100vh" } 4 }

投稿2020/04/22 04:50

編集2020/04/23 16:47
oec

総合スコア271

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaya9460

2020/04/22 21:08

回答ありがとうございます。 requireを試してみたのですが、表示されず同じエラーが出てしまいました。computedを消した場合<template>で{{ image.title }}が表示されたのでdataの記述は問題ないと思います。 ですが、computedをつけると<template>自体が表示されません。 どうしてでしょうか。
oec

2020/04/23 16:48

私が勘違いしていたようで、ごめんなさい。 回答に追記した部分で解決できそうでしょうか…?
masaya9460

2020/04/24 00:49

回答ありがとうございます。 無事解決することが出来ました!
oec

2020/04/24 03:11

解決できてよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問