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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

5802閲覧

[vue.js]v-forで、特定の回数の時に特定の要素(<br>)を追加したが、タグに囲まれてしまい見た目上の反映がされない

llemon

総合スコア17

Vue.js

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/27 12:45

編集2020/09/28 23:43

前提・実現したいこと

現在vue.jsで単位ファイルコンポーネントを用いて開発を行っています。
リストレンダリングである v-for を用いて、特定の回数の時に要素(<br>)を追加したいですがうまく反映されず困っています
(<br>自体がタグに囲まれてしまい、意図した改行にならない)

単一ファイルコンポネントの中では、ボタンをv-forを用いて繰り返しています

実現したいことは以下の通りです
v-forの中で親コンポーネントから受け取った数値に該当する回数の倍数を迎えたときに、改行することです
ここでは2を受け取ったとします。その時は最終的に以下のように出力されます

<label><input type="checkbox"></label> <labe><input type="checkbox"></label> <br> <labe><input type="checkbox"></label> <label><input type="checkbox"></label> <br> <labe><input type="checkbox"></label> <label><input type="checkbox"></label> <br> . . .

ボタンが2個おきに改行されています

該当のソースコード

ここでは<label>に囲まれたチェックボックスを単一ファイルコンポーネントとしています
最終的に、チェックボックスや改行の描写はできるのですが、改行が<span>タグ自体に囲まれてしまい、結果として改行されていない状態で画面に表示されてしまいます。

どのようにすれば、チェックボックスを意図した位置で改行して表示できるのでしょうか
ただし、チェックボックス自体は必ず単一ファイルコンポーネントに書かれるものとしてほしいです

[checkbox.vue]

<template> <fieldset> <span v-for="(item,index) in this.items" :key="item.id"> <label> <input type="checkbox" name="mycheckbox"> {{item.label}} <label> <br v-if((index+1)%maxNumOneLine==0)> </span> </fieldset> </template> <script> (略) name: 'myCheckbox', props:{ maxNumOneLine:{type:Number} } (略) </script> <style scoped> (略) <style>

このコンポーネントを利用する親コンポーネントは以下の通りです
[app.vue]

<template> <myCheckbox :items="checkboxList" :maxNumOneLine="2" > <myCheckbox> </template> <script> import myCheckbox from './checkbox.vue' export default{ name: 'LemonullContentPlatform', data(){ return{ checkboxList:[ {id:1,label:"チェック1"} ,{id:2,label:"チェック2"} ,{id:3,label:"チェック3"} ,{id:4,label:"チェック4"} ,{id:5,label:"チェック5"} ,{id:6,label:"チェック6"} ] } }, components: { checkbox } } </script> <style scoped> (略) <style>

よろしくおねがいします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

要素を二つずつ配列にして、v-forをネストする方法がとりあえずは思いつきます。
また、その時にbrタグをlabelタグと同階層にするためにtemplateタグを使ってv-forを回してあげる必要があるかと思います。リストレンダリングで複数の要素を対象に取る

js

1[ 2 [{id:1,label:"チェック1"},{id:2,label:"チェック2"}], 3 [{id:3,label:"チェック3"},{id:4,label:"チェック4"}], 4 [{id:5,label:"チェック5"},{id:6,label:"チェック6"}] 5]

html

1<template v-for="(array, index) in this.items" :key="index"></template> 2 <label v-for="(item, key) in array" :key="key"> 3 <input type="checkbox" name="mycheckbox">{{item.label}} 4 <label> 5 <br /> 6</template> 7

動作の確認はしてないので参考までに

投稿2020/09/27 15:20

zushi0905

総合スコア683

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

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

llemon

2020/09/27 15:50

ご回答ありがとうございます。 なるほど。その方法は思いつきませんでした。 ちなみにですが正直なところ、見た目上改行されていればよいので<br>タグでなくとも、頂いた<template>の一つ下の階層を<label>タグではなく<div>タグなどで囲んでしまうのもよいかと思いました。素晴らしいヒントをありがとうございます。
zushi0905

2020/09/28 01:22

この方法は今の条件でパッと思いついた方法ですが、もし自分がhtmlから作るとしたら、改行はflexboxでcssに任せてしまい、js側はシンプルなv-forで完結させると思います
llemon

2020/09/28 23:37 編集

flexboxを知りませんでした。調べてみると解決策になりそうな機能だということがわかりました。 追加でご回答いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問