COOSY BLOG
  • HOMEホーム

  • SERVICEサービス

    • サービスTOP
    • Web制作
    • ブランディング
    • デジタルマーケティング
    • 戦略企画
    • DX推進・システム開発
    • グローバル展開
  • WORK制作実績

    • 制作実績TOP
    • コーポレートサイト
    • 採用サイト
    • ECサイト
    • プロモーション
    • サービスサイト・SaaS
    • システム開発
  • ABOUTクーシーについて

    • クーシーについて
    • 会社情報
    • 私たちが大切にしていくこと
    • お知らせ
    • クーシーラボ岩手
    • ロンドン支社
    • ミャンマー支店
  • BLOGブログ

  • RECRUITリクルート

  • Contactお問い合わせ

BLOG MENU

  • BLOGトップ
  • 目的別

    • 目的別TOP
    • コーポレートサイト
    • ECサイト
    • オウンドメディア
    • 採用サイト
    • プロモーション
    • Webサービス
    • LP
    • ブランディング・CI
  • Web制作ハウツー

    • Web制作ハウツーTOP
    • UIUX・サイト設計
    • WebデザインTips
    • PM/ディレクション
    • フロントエンド(HTML/CSS)
    • 撮影・動画編集
    • ライティング
    • CMS
    • Web制作ツール
    • イラスト
  • システム開発

    • システム開発TOP
    • プログラミング
    • EC構築
    • CMS開発・構築
    • サーバ構築
    • データベース構築
    • セキュリティー
  • Webサイト運用のコツ

    • Webサイト運用のコツTOP
    • サイト運用・管理・保守
    • コンテンツ運用
    • CRM(顧客管理)
  • Webマーケティング

    • WebマーケティングTOP
    • SEO対策・トレンド
    • コンテンツ制作・SEOライティング
    • アクセス解析
    • Web広告
    • Web集客ハウツー
  • 特集

    • 特集TOP
    • Web最新トレンド
    • カルチャー
    • ガジェット

Share on

  • Xでシェアする
  • Facebookでシェアする
  • このエントリーをはてなブックマークに追加

【コード付】v-ifとv-forの使い方!Vue.jsで一覧ページのテンプレート作成

  • システム開発
  • プログラミング
【コード付】v-ifとv-forの使い方!Vue.jsで一覧ページのテンプレート作成

Vue.jsに興味がある、使ってみたいけど実装の具体的なイメージがわからない人は多いと思います。本記事ではWebサイトでよくある「記事一覧」を例に、Vue.jsを使って実装する方法を紹介します。
わかりやすいようにサンプルコードを添えて進めていくので、これを機会にVue.jsの導入にステップアップしていきましょう。

記事一覧で大きく必要になってくる要素は「条件分岐」と「繰り返し」です。Vue.jsではv-ifとv-forという要素を使うことで簡単に実装できます。まずはv-ifとv-forそれぞれの使い方から解説します。

条件によって描画する要素を切り替えたい

条件によって描画する要素を切り替えるイメージ

Webサイトを運営していると、直近の記事に「new!」アイコンを付けたい、画像が登録されている記事だけサムネイルを表示したいといったことはよくあると思います。

v-ifディレクティブはプログラミングのif分岐のように条件に応じてブロックの描画を切り替えることができます。また、条件に当てはまらなかった時に表示するelseブロックを追加することも可能です。

new Vue({
  el:'#sample',
  data: {
    flag: true
  }
})
<p v-if="flag"> flagがtrue<p>
<p v-else> flagがfalse<p>

v-ifディレクティブは単一の要素にしか付与することができません。記事を丸ごと対象としたい時など、多くの要素を切り替えたい場合、非表示ラッパーとして以下のように<template>で囲うことにより実現できます。

<template v-if=" flag ">
  <h1> flagがtrueの時</h1>
  <p>このtemplate内が表示される</p>
</template>

複数の分岐条件で切り替えたいときはv-else-ifを使用します。

<h1 v-if="page == 'top'">トップページ</h1>
<h1 v-else-if="page == 'search'">検索ページ</h1>
<h1 v-else>その他のページ</h1>

データをリストとして繰り返し描画したい

テンプレートを1つ用意して作業を簡略化するイメージ

記事の一覧を作る時、データを1つずつ手動で一覧に当てはめていくことは現実的ではありません。記事のテンプレートを1つ用意し、それを使いまわすことで作業を簡略化しましょう。

Vue.jsではv-forディレクティブを使用することによって描画を繰り返すループ処理を実装できます。

new Vue({
  el:'#sample',
  data: {
    list : [
      {item : "hoge"},
      {item : "fuga"},
      {item : "hogehoge"}
    ]
  }
})
<ul id="sample">
  <li v-for="column in list" :key="column.item">
    {{ column.item}}
  </li>
</ul>

配列で用意された3つのデータに対し、テンプレート1つで3項目出力が可能です。

出力結果

  • hoge
  • fuga
  • hogehoge

注意点

v-ifとv-forを同じ要素に使用することは非推奨とされています。
v-ifとv-forが同じ要素に存在するとき、v-ifよりもv-forが優先されます。そのため、条件付きでループを描画したい、というようなときは以下のようにラッパー要素を使用して実装しましょう。

<template v-if="show_list">
  <ul>
    <li v-for="item in list">{{item}}</li>
  </ul>
</template>

実装サンプルコード

では、実際にv-ifとv-forを使ってページを作ってみましょう。
以下のサンプルでは記事の一覧データをajaxで取得し、表示しています。JSONとして取得したデータを配列に変換しVueのデータとして反映します。
リストの生成にはv-forを使用し、カテゴリの表示をアイコンで行う想定でv-ifで切り替えています。

init = new Vue({
  el : '#vue-control-area',
  data : {
    ARTICLES : ''
  },
  methods : {
    getContents : function(){
      $.ajax({
        type : 'POST',
        url  : '/api/get_content.php',
        dataType : 'json',
        data : {
        }
      }).done(function(response){
        init.ARTICLES  = JSON.parse(response);
      }).fail(function(data){
        alert('記事の取得に失敗しました');
      });
    }
  }
});
init.getContents();
<!DOCTYPE html>
<html lang = "ja">
  <head>
    <meta charset = "utf-8">
    <title>Vueサンプルページ</title>
  </head>
  <body>
    <h1>投稿一覧</h1>
    <ul>
      <li v-for="article in articles">
        <img v-if="article.category == 'news'" src="/images/news_icon.png">
        <img v-else-if="article.category == 'blog'" src="/images/blog_icon.png">
        <img v-else-if="article.category == 'press'" src="/images/press_icon.png">
        <img v-else src="/images/other_icon.png">
        <p>{{article.title}}</p>
        <p>{{article.description}}</p>
        <p>{{article.date}}</p>
      </li>
    </ul>
  </body>
</html>

上記の例では、記事のタイトル、カテゴリ、概要、日付をAPIで取得しています。カテゴリのアイコンはニュース、ブログ、プレスリリースはそれぞれのアイコンを表示し、それ以外のものはその他のアイコンを表示します。

テンプレート描画にVue.jsを使うメリット

記事の一覧ページなどをajaxの非同期通信で描画するとき、実装をすべてJavaScript、jQueryで行うと複雑で時間がかかる上、テンプレートの修正が難しくなるなどメンテナンス性も低くなってしまいます。
Vue.jsを導入することで描画処理をVue.jsに一任できるため、シンプルで可読性の高いソースコードとなり、後からの修正も簡単に行うことができます。

Vue.jsには他にもメリットがあります。詳しくはこちらの記事をどうぞ。


3分でわかるVue.jsのエンジニア的5大メリット「jQueryより簡単!」

まとめ

今回はv-ifとv-forの2つのディレクティブの使い方を紹介しました。
Vueには他にもまだまだ便利なディレクティブがあります。公式ドキュメントもわかりやすいので、さらに理解を深めたい方はぜひ読んでみましょう。

Vue.jsは他のフレームワークと比較して敷居が低いのが特徴です。導入して短時間で高品質な実装を目指していきましょう。

クーシーブログ編集部

この記事を書いた人

クーシーブログ編集部

1999年に設立したweb制作会社。「ラクスル」「SUUMO」「スタディサプリ」など様々なサービスの立ち上げを支援。10,000ページ以上の大規模サイトの制作・運用や、年間約600件以上のプロジェクトに従事。クーシーブログ編集部では、数々のプロジェクトを成功に導いたメンバーが、Web制作・Webサービスに関するノウハウやハウツーを発信中。

お問い合わせはこちらから

Web制作デザイン、丸ごとお任せ

お問い合わせする

2021/05/24

吉田

Share on

  • Xでシェアする
  • Facebookでシェアする
  • このエントリーをはてなブックマークに追加
お問い合わせはこちら

プログラミングの関連記事はこちら

  • Laravel 11から12への変更点とアップデート方法【注目の新機能まとめ!】

    Web制作会社クーシーが、Laravel 12の変更点とアップデート方法をわかりやすく解説! パフォーマンス向上やセキュリティ強化、開発体験を向上させる新機能もご紹介します。

    • プログラミング
  • Astro.jsとは? 高速・軽量の新世代フレームワークをWeb制作会社が詳しく解説

    Webサイトの表示速度にお悩みですか? 高速・軽量な次世代フレームワーク「Astro.js」が解決の鍵になるかもしれません。特徴やメリットなど、Web制作会社のクーシーがわかりやすく解説します。

    • プログラミング
  • 【はじめてのPHP】初心者向けに特徴と使い方をやさしく解説

    PHPは、Web開発で重要な役割を果たすプログラミング言語です。身近なところではWordPressに使われています。

    • プログラミング
  • 【DockerでReactの環境構築】エンジニア1年生と学ぶコンテナ構築までの手順

    Dockerでの環境構築は慣れていない人にはやや複雑です。本記事では画像つきで、初心者でもできるようにわかりやすく解説します。

    • プログラミング
  • 【図解】APIとは?メリットや連携事例をわかりやすく解説

    APIはアプリやサービス同士をプログラムでつなぐ仕組みのことです。この記事ではメリットや連携事例をわかりやすく説明しています。

    • プログラミング
  • 複雑なAjaxで悩みがち!処理をうまく解決する3つの方法

    今回はAjaxのご紹介と実装方法を解説します。ページ全体の読み込みをしないで、非同期通信(Ajax)でページ内のコンテンツを一部だけ更新・生成することができます。

    • プログラミング
  • Youtube動画を埋め込む方法!知っておきたいカスタマイズ16選

    Webサイト制作で、ビジュアルやビデオなどの掲載に、YouTubeを使うことがあります。単純に動画を流すだけではなく、カスタマイズを行って、より近いイメージに変更できればと思うケースがありますよね。

    • 撮影・動画編集
    • プログラミング
  • Vue.js入門!インストールから教える基本的な使い方!【初心者向け】

    Vue.jsをWebサイトで使うときに、私が引っ掛かったポイントを含め、導入方法と基本的な使い方をご紹介します。本記事は、Vue.js 2についての記事になります。

    • プログラミング

COOSYの
制作実績

UIUXと美しさを両立させた、クーシーが誇る成功事例一覧。
課題解決のアイデア満載です。

制作実績を見る

Web制作の課題はクーシーが解決します

  • DX推進・システム開発

  • Web制作

    コーポレートサイト、採用サイト、ECサイトまで。最新AI技術を掛け合わせ、各サイトの特性に合わせたUIUX設計を実現します。

  • UIUX設計

    人間中心設計で価値ある体験を創造。SEO・AIOにも貢献し、LTV向上につながる直感的な画面デザインを実現します。

CATEGORY LIST

  • すべての記事一覧

  • 目的別

    • 目的別TOP
    • コーポレートサイト
    • ECサイト
    • オウンドメディア
    • 採用サイト
    • プロモーション
    • Webサービス
    • LP
    • ブランディング・CI
  • Web制作ハウツー

    • Web制作ハウツーTOP
    • UIUX・サイト設計
    • WebデザインTips
    • PM/ディレクション
    • フロントエンド(HTML/CSS)
    • 撮影・動画編集
    • ライティング
    • CMS
    • Web制作ツール
    • イラスト
  • システム開発

    • システム開発TOP
    • プログラミング
    • EC構築
    • CMS開発・構築
    • サーバ構築
    • データベース構築
    • セキュリティー
  • Webサイト運用のコツ

    • Webサイト運用のコツTOP
    • サイト運用・管理・保守
    • コンテンツ運用
    • CRM(顧客管理)
  • Webマーケティング

    • WebマーケティングTOP
    • SEO対策・トレンド
    • コンテンツ制作・SEOライティング
    • アクセス解析
    • Web広告
    • Web集客ハウツー
  • 特集

    • 特集TOP
    • Web最新トレンド
    • カルチャー
    • ガジェット
  • WORKS

    Webサイト・アプリなどの
    様々な実例・制作実績のご紹介

    WORKS
  • CONTACT CONTACT

    Webサイトのご相談、お見積もりはこちらから

    Webサイトのご相談、お見積もりなど
    お気軽にお問い合わせください

ホーム

  • TOP
  • COOSY BLOG
  • 【コード付】v-ifとv-forの使い方!Vue.jsで一覧ページのテンプレート作成
ページトップへ
  • TOP
  • SERVICE

    • ブランディング
    • デジタルマーケティング
    • 戦略企画
    • DX推進・システム開発
    • グローバル展開
    • Web制作
  • WORKS

    • コーポレートサイト
    • 採用サイト
    • ECサイト
    • プロモーションサイト
    • サービスサイト
    • システム開発
  • ABOUT

    • 会社情報
    • 私たちが大切にしていくこと
    • お知らせ
    • クーシーラボ 岩手
    • ロンドン支社
    • ミャンマー支店
  • RECRUIT

    • ディレクション部
    • デザイン部
    • システム開発部
    • アカウント・プランニング部
    • Webマーケティング事業部
    • 人事・総務部
    • オフショア
    • グローバル事業部
  • BLOG

    • 目的別
    • Web制作ハウツー
    • システム開発
    • Webサイト運用のコツ
    • Webマーケティング
    • 特集

COOSY SNS

  • facebook
  • X
  • お問い合わせ
  • Privacy policy
  • Site Policy
  • Security Policy
© COOSY All Rights Reserved.