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

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

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

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

JavaScript

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

335閲覧

Vue.jsでデータが表示されません...

fruitmachine

総合スコア47

Vue.js

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

JavaScript

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/03/04 14:13

やりたいこと

デベロッパーツールでは以下のように表示され、itemsにデータは入っているはずなので、
「hoge」が31個表示されると思うのですが、何も表示されません...。

後述のソースコードのどこが間違っているのか、教えてください。
イメージ説明

ソースコードでやっていること

  • 指定した月の予定を取得する
  • 月の日数(3月であれば31日分)の空の配列を用意する
  • 用意した配列に、取得した予定を、日付をインデックスとして追加する

ソースコード

//calender.vue <template> <section class="calender"> <ul> <li v-for='item in items'>hoge</li> </ul> </section> </template> <script> export default { data() { return { items: [] } }, mounted() { this.year = new Date().getFullYear(); this.month = new Date().getMonth() + 1; this.getData(this.year, this.month); }, methods: { getData(year, month) { var _this = this; var endpoint = '/api/schedule/' + year + '/' + month; $.ajax({ url: endpoint, type: 'GET', dataType: 'json', }) .then( function(data) { _this.process(data); }) }, process(data) { var _this = this; var dt = new Date(_this.year, _this.month, 1); dt.setDate(dt.getDate() - 1); var maxDate = dt.getDate(); for (var i=0; i<maxDate; i++) _this.items[i] = []; data.forEach(function(value) { var date = new Date(value['date']).getDate(); _this.items[date].push(value); }); } } } </script>

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
公式ドキュメント - リストレンダリングより

JavaScript の制限のため、Vue は配列で以下の変更を検出することはできません:

  1. インデックスでアイテムを直接設定するとき。例: vm.items[indexOfItem] = newValue
  2. 配列の長さを変更するとき。例: vm.items.length = newLength

とあったので、それぞれpushspliceを使って書き換えました。

//before for (var i=0; i<maxDate; i++) _this.items[i] = []; //after for (var i=0; i<maxDate; i++) _this.items.push([]);
//before _this.items[date].push(value); //after _this.items[date].push(value); _this.items.splice(date, 1, _this.items[date]);

投稿2018/03/04 15:08

fruitmachine

総合スコア47

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問