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

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

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

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

JavaScript

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

Q&A

1回答

3942閲覧

500エラーがでた場合、Vue.jsでエラー画像を描画したい(axios利用)

anusama

総合スコア13

Vue.js

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

JavaScript

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

0グッド

0クリップ

投稿2019/03/28 13:09

編集2019/04/01 05:20

前提・実現したいこと

Vue.jsで検索機能を作成しています。
ステータスコードが500系の時に、「読み込みに失敗しました」等を描画するのにつまづいております。

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

Vue.jsの実装に悩んでおります。
現状axiosを利用し、200系以外はステータスコードを吐く仕組みは、なんとか調べてできた段階です。
問題点は主に2点あると考えています。

methods:に書く適切な形が正しくないと思われる。

template内のv-if="xxxx"にどのように繋げれば、描画することができるのか不明。

methods:で200以外のステータスコードを着火とすれば、
v-ifで描画に繋げることができるのではないか
と考え試しておりますが、適切な実装手段がみえていない状態です。

該当のソースコード

search.vueの一部抜粋
npmからaxiosをインストール済みです。

<template> <div class="SearchResults"> <div class="text-center mb-5 pb-5" v-if=" "> <figure><img src="./hoge.png"></figure> <h1>読み込みに失敗しました</h1> <p><a href="#">再読み込み</a></p> </div> </div> </template> <script> const axios = require('axios'); export default { methods: { //200以外はエラー SearchError () { axios.get('https://hoge/fuga').catch(function (error) { if (error.response) { console.log(error.response.status); } }); } } } </script>

試したこと

多くのサイトを参考にし、試行錯誤しましたがうまく描画されませんでした。
axiosを利用するだろうと推測し、ここまで進みましたが詰まってしまいました。
私の実力不足で理解が及ばす、的はずれな書き方をしていると思いますが、
どうぞお力をお貸していただければと思います。

主に参考にしたサイト
https://www.yoheim.net/blog.php?q=20170801
https://qiita.com/kimullaa/items/6e7bcc3779c32a383826
https://qiita.com/shisama/items/61cdcc09dc69fd8d3127

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

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

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

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

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

_Victorique__

2019/03/28 14:04

具体的に実現したいことに対する現状を教えてください。
anusama

2019/03/28 14:23 編集

質問、ありがとうございます!! webpackを利用しており、トランスパイルは問題なくできております。 しかし、エラーの描画ができておりません。 現状、記載した主問題と思われる2点に詰まっております。 `v-if`は、メソッドの200以外のステータスコードを着火とすれば、 描画に繋げることができるのではないか と考え試しておりますが、適切な実装手段がみえていない状態です。
_Victorique__

2019/03/28 14:33

疑問なのですが、axiosを実行するタイミングはいつでしょうか?
anusama

2019/03/28 14:39

検索を行い、読み込むタイミングを考えております。 すいません、ソースコードの追記を行います。 抜粋が過ぎました。
_Victorique__

2019/03/29 01:37

searchErrorとthis.bus.$emit('loadMore')の違いは何でしょうか? 何故2回axiosしているのでしょうか?this.bus.$emit('loadMore')がaxiosしているかは分からないですが。
anusama

2019/03/30 12:21

Victorique様 返事が遅くなり申し訳ございません。 ご質問ありがとうございます! axiosはしておりません。 おかげさまで、解決への道筋をある程度掴むことができました。 解決次第、コードをこちらに載せる予定です。 お時間をいただき、ありがとうございました!
guest

回答1

0

  1. data(){}に変数を追加して
  2. v-ifにその変数名を記入
  3. その変数のtrue,falseを切り替えれば表示・非表示を切り替えることができます。

※このコードは動作未検証です。

html

1<div class="text-center mb-5 pb-5" v-if="hasError500"> 2 3... 4 5 6<script> 7data () { 8 return { 9 loading: false, 10 completed: false, 11 listings: [], 12 listingStatusTexts: [], 13 hasError500: false, 14 } 15}, 16 17 18SearchError () { 19 axios.get('https://ancar.senna/cars/search').catch(function (error) { 20 if (error.response) { 21 if (error.response.status == 500 || 22 error.response.status == 502 || 23 error.response.status == 503) { 24 this.hasError500 = true 25 } 26 } 27 }); 28} 29</script>

投稿2019/03/29 06:33

KaiShoya

総合スコア551

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

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

anusama

2019/04/01 01:02 編集

KaiShoya様 返事が遅くなり申し訳ございません。 ご回答、ありがとうございます。 残念ながら当コードでは期待する動作はしませんでした。 ただ、おかげさまでヒントを得ることができ、解決への道筋がなんとかたちました。 解決次第、コードをこちらに載せる予定です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問