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

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

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

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

HTML5

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

Q&A

解決済

1回答

1572閲覧

Vue.js HTML カレンダー表示のコーディング

seastar

総合スコア62

Vue.js

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

HTML5

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

0グッド

0クリップ

投稿2021/11/15 00:53

編集2021/11/15 02:10

PHP7.4 / HTML5

以下サイトのような、日付とイベントの縦並びカレンダーを作成したいです。
参考

ただ、参考サイトが週の配列を生成していますが、
1か月分のリストの中に日付ごとのデータのみを格納して同じことを再現したいです。

そこで下のように書きましたが、trタグの中に7日分tdタグを作る、ということができません。
(templateタグに入れた、v-if="new Date(key).getDay() === 0 →週の始めであればtrタグを付ける
===6であれば、週の終わりなのでtrタグを閉じる想定で書きました。)

上記のような書き方をする方法が分からず、方法ありましたらご教示お願いいたします。
週の配列を用意したくない理由は、カレンダーに作るイベントが週をまたぐ場合があるからです。
(1週から2週目まで旅行、など)

html

1<table class="calendar"> 2 <tbody v-for="(event, key) in event_list"> 3 <template v-if="new Date(key).getDay() === 0"> 4 <tr> 5 </template> 6 <td class=""> 7 <p>%key%</p> 8 <ul class=""> 9 <li> 10 <p>%event.name%</p> 11 </li> 12 </ul> 13 </td> 14 <template v-if="new Date(key).getDay() === 6"> 15 </tr> 16 </template> 17 </tbody> 18</table>

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

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

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

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

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

m.ts10806

2021/11/15 01:05

Vue.js のタグは必要に思います
seastar

2021/11/15 01:49

無知で大変申し訳ありません。Vue.jsのタグはテンプレート公文に出てくるtemplateタグと認識していますが、違いますか? 自分で作成し、質問文に書いたtemplateを自作のタグに置き換えるということでしょうか?
m.ts10806

2021/11/15 01:59

いえコードではなく質問タグのことです。
guest

回答1

0

ベストアンサー

Vueの場合(Reactでもそうですが)、普通はコンポーネント化して作る方が無難です。この場合だとこんな感じに組み立てていきます。繰り返しはv-forで対処します。

省略している部分にカレンダーを呼び出すための数値を制御します。そこまで難しくないので、割愛します。

親コンポーネント v-forで週数(4~5)繰り返す

vue

1<template> 2 <table> 3 <thead> 4 <tr> 5 <th>Sun</th> 6 <th>Mon</th> 7 <th>Tue</th> 8 <th>Wed</th> 9 <th>Thi</th> 10 <th>Fri</th> 11 <th>Sat</th> 12 </tr> 13 </thead> 14 <tbody> 15 <CalTr v-for="(week,i) in weeks" 16 :week = "week" 17 ></CalTr> 18 </tbody> 19 </table> 20</template> 21<script> 22import CalTr from './CalTr.vue' 23export default{ 24 name: 'Calender', 25 components:{ 26 CalTr, 27 }, 28 data(){ 29 return{ 30 weeks: [], 31 } 32 }, 33/*以下略*/

子コンポーネント(CalTr.vue) v-forで7回(日数)繰り返す

vue

1<template> 2 <tr> 3 <CalTd v-for="day in week" 4 :day="day" 5 ></CalTd> 6 </tr> 7</template> 8<script> 9import CalTd from './CalTd.vue' 10export default{ 11 name: 'CalTr', 12 components:{ 13 CalTd, 14 }, 15 props:[ 16 "week", 17 ], 18} 19</script>

孫コンポーネント(CalTd.vue) 

vue

1<template> 2 <td>{{ day }}</td> 3</template> 4<script> 5export default{ 6 name: 'CalTd', 7 props:[ 8 "day", 9 ] 10} 11</script>

投稿2021/11/15 09:01

編集2021/11/16 02:07
FKM

総合スコア3644

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問