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

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

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

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

HTML5

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

Onsen UI

HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

401閲覧

サーバサイドから取得したjsonが画面に反映されない

s-san.8

総合スコア13

Vue.js

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

HTML5

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

Onsen UI

HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2017/07/19 08:17

編集2017/07/20 04:14

###前提・実現したいこと
monaca Onsen UI V2 Vue Navigation (単一ファイルコンポーネント)でアプリを作成しております。
外部サーバーから取得した json のレスポンスデータ を配列にセットし v-for にてリストを表示したいです。

以前も質問させていただき
<v-ons-page> を使わなければ画面表示が行える旨、ご案内いただきました。

上記で、継続して開発を行っているところ、Navigation の機能が使えない等の問題もあり
改めて、質問させていただきます。

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

レスポンスデータが取得出来ているのはログをコンソースに出力して確認できているのですが
配列にセットした情報が画面に表示されない。

###該当のソースコード

axios_http.js

import axios from 'axios'; const http = axios; export default (Vue) => { Vue.http = http; Object.defineProperties(Vue.prototype, { $http: { get () { return http; } } }); };

main.js

import Vue from 'vue'; import VueOnsen from 'vue-onsenui'; import http from './axios_http.js'; import 'onsenui'; // Onsen UI Styling and Icons require('onsenui/css-components-src/src/onsen-css-components.css'); require('onsenui/css/onsenui.css'); import App from './App'; Vue.use(http); Vue.use(VueOnsen); new Vue({ el: '#app', template: '<app></app>', components:{App} });

App.vue

<template> <v-ons-navigator :page-stack="pageStack"> <component :is="page" v-for="page in pageStack" :page-stack="pageStack"></component> </v-ons-navigator> </template> <script> import page1 from './Page1'; import page2 from './Page2'; export default { data() { return { pageStack: [page1] } } } </script>

Page1.vue

<template> <v-ons-page> <div v-for="myData of myDatas" :key="myData.label" style="width: 50%; float: left;"> <v-ons-card> <img :src="myData.url" :alt="myData.alt" style="width: 100%"> </v-ons-card> </div> </v-ons-page> </template> <script> export default { data () { return { // myDatas: this.getMyDataInfo() myDatas: this.getMyDataInfoJson() }; }, methods: { getMyDataRow(i) { return { label: '', url: "http://xxxxxxx/" + i + ".jpg", alt: "画像" + i }; }, getMyDataInfo() { const data = []; for (let i = 1; i < 3; i++) { data.push(this.getMyDataRow(i)); } return data; }, getMyDataRowJson(my_data) { return { label: my_Data.label, url: my_data.url, alt: my_data.alt }; }, getMyDataInfoJson() { const data = []; var myDataInfo = []; var myDataCnt = 0; this.$http.get('http://xxxxxxx/').then((response) => { // 成功 if(response.data.status == 200){ myDataInfo = response.data.my_Data; myDataCnt = myDataInfo.length; //レスポンスデータが存在する場合 if(myDataCnt != 0){ for (let i = 0; i < myDataCnt; i++) { data.push(this.getMyDataRowJson(response.data.my_Data[i])); } } // エラー }else{ } }, (response) => { // alert(response.status); // エラー処理 }); return data; } } }; </script>

###試したこと

json と同様のフォーマットの手書き配列を 同一ファイル内のfunction getMyDataInfo() で返した場合
画面には反映されました。

json レスポンスの場合に画面に反映されません。
json レスポンスの場合でも以下の件数表示は正常に行えます。
{{myDatas.length}}

配列にデータが入っている事はコンソールでも確認済みなのですが
以下の処理が行われておりません。
<div v-for="myData of myDatas" :key="myData.label">
<v-ons-card>
<img :src="myData.url" :alt="myData.alt" style="width: 100%">
</v-ons-card>
</div>

今回、最新版のmonaca Onsen UI V2 Vue Navigation でも確認しましたが
同様の現象で、画面に表示出来ておりません。

よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2017/07/19 08:20

プログラムコードは```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)
rururu3

2017/07/20 03:54

Navigation の機能が使えないという部分のソースが一切ないので、前回と同様の質問にしか見えませんのでその部分も記載していただければと思います。
s-san.8

2017/07/20 04:16

ご回答ありがとうございます。また、前回もありがとうございました。Navigation 箇所、Vue の生成箇所等ソースを追加いたしました。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

Page1.vue

<template> <v-ons-page> <div> <v-ons-card v-for="myData in myDatas" :key="myData.label"> <img :src="myData.url" :alt="myData.alt" style="width: 100%"> </v-ons-card> </div> </v-ons-page> </template> <script> export default { data: function () { return { myDatas: this.getMyDataInfoJson() }; }, methods: { getMyDataInfoJsonLocal() { return([ { "label": "test1", "url": "https://monaca.io/img/logos/download_image_onsenui_01.png", "alt": "alt1" }, { "label": "test2", "url": "https://monaca.io/img/logos/download_image_onsenui_01.png", "alt": "alt2" } ]); }, getMyDataRowJson(my_data) { return { label: my_data.label, url: my_data.url, alt: my_data.alt }; }, getMyDataInfoJson() { const data = []; var myDataInfo = []; var myDataCnt = 0; this.axios.get('http://localhost:8000/debug/test.json').then((response) => { // 成功 if(response.status == 200) { //レスポンスデータが存在する場合 response.data.data.forEach((value) => { data.push(this.getMyDataRowJson(value)); }); } else { // エラー } }, (response) => { // alert(response.status); // エラー処理 }); return(data); } } }; </script>

で動くの確認したのですが、試していただけますでしょうか。
(json取得部分はaxiosなど使って試してますので、そちらの環境に変えてください)

投稿2017/07/20 05:05

rururu3

総合スコア5545

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

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

s-san.8

2017/07/20 05:37

ご回答ありがとうございます! 動きました・・ 前回分も含め、本当にありがとうございます! 助かりました! 今後とも、色々、参考にさせていただきます! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問