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

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

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

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2644閲覧

Vue.jsでfor文で画像番号に順番をつけていきたい

ttkun

総合スコア30

Vue.js

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

1クリップ

投稿2020/03/12 22:52

Nuxt+vuetifyv-forを使いvue-awesome-swiper内に繰り返しを表示させたいと思い下記のようなソースをかきました。

index.vue

1<template lang="pug"> 2swiper(:options="swiperOption") 3 swiper-slide(v-for="(item, index) in items" :key="index") 4 v-img(:src="item.slideimage") 5 {{ item.title }} 6</template> 7 8<script> 9let items = []; 10for(let i=1; i<=5; i++) 11{ 12 items.push({ 13 no: i, 14 title: 'title' + i, 15 slideimage: require("@/assets/images/home/slide01.jpg") , 16 }); 17} 18 19export default { 20 data () { 21 return { 22 items:items, 23 // 省略 24 } 25 } 26} 27</script> 28

タイトルを自動で数字順に追加していきたいと思いscript内でfor文でまわし、順番に追加していくようにしました。

ここで画像の部分で詰まってしまいました。

上記の書き方に画像の部分だけかいてみましたがいまいち表示せず

slideimage: require("@/assets/images/home/slide{#i}.jpg") slideimage: require("'@/assets/images/home/slide' + {#i} + '.jpg") slideimage: require("'@/assets/images/home/slide' + i + '.jpg") slideimage: require("'@/assets/images/home/slide' + [i] + '.jpg'")

繰り返しに変数を代入するにはどのように記述すればよいのかの情報を探しています。

s.k👍を押しています

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

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

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

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

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

miyabi-sun

2020/03/12 23:34

質問ですが、 画像ファイルがassets内のままHTMLファイルに埋め込まれる手法は基本的には非推奨ですが、 そうしなければいけない背景等があるんでしょうか? そうではないのなら、普通に画像ファイルをWebサーバで配信するようにして、そのURLをsrc属性にはめ込めば良いだけです。
ttkun

2020/03/13 00:12

assetsとstaticの立ち位置がいまいちわかっておらず、webpackを使うならassetsフォルダにいれておくぐらいの認識でした。 上記の実装ではnuxt内に画像を保存するなら適切な保存先は違うということでしょうか?
miyabi-sun

2020/03/13 00:32

なるほど、Nuxtの思想に関して調査したのも合わせて納得の行く答えが得られました。 回答していきますね。
guest

回答2

0

ベストアンサー

繰り返しに変数を代入するにはどのように記述すればよいのかの情報を探しています。

ファイル名に連番を付けていくには、全体をダブルクォーテーションで囲むのではなく

javascript

1slideimage: require("'@/assets/images/home/slide' + i + '.jpg")

このように、文字列部分と変数iを連結するようにします。

javascript

1slideimage: require('@/assets/images/home/slide' + i + '.jpg')

これはJavaScritpの変数展開を使うと、下記のようにもう少し簡潔に記述できます。
※シングルクォートで囲っているのではなくバッククォートで囲っている点にご注意ください。

javascript

1slideimage: require(`@/assets/images/home/slide${i}.jpg`)

これでファイル名に変数iによる連番を付加することができると思いますが、ファイル名の連番部分が前0を付けた"slide01.jpg"のようなフォーマットだと、変数iが一桁のときに前0を付加する処理が必要になります。

以下が全体のコードになります。

vue

1<script> 2export default { 3 data() { 4 const items = [] 5 for (let i=1; i<=5; i++) { 6 items.push({ 7 no: i, 8 title: 'title' + i, 9 slideimage: require(`@/assets/images/home/slide${this.zeroPadding(i, 2)}.jpg`) 10 }) 11 } 12 return { 13 items 14 } 15 }, 16 methods: { 17 zeroPadding(index, size) { 18 let tmp = index + '' 19 while (tmp.length < size) tmp = '0' + tmp 20 return tmp 21 } 22 } 23} 24</script>

投稿2020/03/13 01:37

rubytomato

総合スコア1752

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

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

ttkun

2020/03/14 07:45

ありがとうございます。Javascriptの基本的なことで大変勉強になります。
guest

0

この記事がよくまとまっており、参考になったので抜粋しながら説明します。

参考記事: Nuxt.js|画像の参照方法のいろいろ

まとめると、

  • データ容量の小さな画像は「assets」に格納
  • データ容量の大きな画像は「static」に格納

と覚えておくと良いかと思います。

WebpackはJSファイルを払い出す為に、
画像ファイルを無理やり文字列化してJSファイル内にねじ込む設計となっています。
こういうものは小さな画像アイコンが基本です。

スライドショー等で見せたいような画像は分離した方が、
コンパイルの時間も減るでしょうしオススメです。

v-img(:src="item.slideimage")という指定なので
単なるimg要素のsrc属性なので、上記の記事の「staticディレクトリの画像を参照する」のやり方がオススメです。

js

1let items = []; 2for(let i=1; i<=5; i++) 3{ 4 items.push({ 5 no: i, 6 title: 'title' + i, 7 slideimage: "images/home/slide01.jpg", 8 }); 9}

投稿2020/03/13 00:43

編集2020/03/13 00:44
miyabi-sun

総合スコア21158

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

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

ttkun

2020/03/14 07:44

ありがとうございます。 今後のファイルの格納場所の参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問