[Vue.js]超簡単に分岐フォームが作れるライブラリ「vue-flow-form」

vue-flow-formとは

vue-flow-formは、分岐のあるフォームを簡単に実装できるコンポーネントライブラリです。

テキスト入力はもちろん、セレクト形式、日付、選択式などのバリエーションの入力項目が実装されています。
更に選択した内容によって、質問分岐させることも可能です。

予め用意されたテーマCSSを呼びだけせば、特にレイアウト調整をする必要もなくすぐにフォームを使用することができます。

 

【動画サイズ:300KB】

 

環境

この記事は、以下の管理人の検証環境にて記事にしています。

vue.js 2.6.10
vue-flow-form 1.1.6

 

ライブラリの取得

ライブラリを取得するには、npm, CDNのどれか一つを使用します。

npm

npm install @ditdot-dev/vue-flow-form --save

CDN

<script src="https://cdn.jsdelivr.net/npm/@ditdot-dev/[email protected]/dist/vue-flow-form.umd.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ditdot-dev/[email protected]/dist/vue-flow-form.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ditdot-dev/[email protected]/dist/vue-flow-form.theme-green.css">

gitリポジトリは以下から取得できます。

 

導入手順

管理人が行った、動作確認サンプルを実装するために、以下の手順でソースコードを導入していきます。
このサンプルでは、フォームを実装します。

 

step
1
ライブラリの呼び出し

まずライブラリを呼び出す為に、以下の2通りのケースで呼び出します。

ES6等で実装する場合

import FlowForm, { QuestionModel, QuestionType, ChoiceOption, LanguageModel } from '@ditdot-dev/vue-flow-form'
@import '[email protected]/vue-flow-form/dist/vue-flow-form.css';
@import '[email protected]/vue-flow-form/dist/vue-flow-form.theme-minimal.css';
/* @import '[email protected]/vue-flow-form/dist/vue-flow-form.theme-green.css'; */
/* @import '[email protected]/vue-flow-form/dist/vue-flow-form.theme-purple.css'; */

UMDで実装する場合

なし

 

step
2
Vueインスタンスを設定


LanguageModelにコンポーネントの要所の言語を設定します。
サンプルに掲載された設定が全ての設定になります(2021.02.26時点)。

フォームの質問内容は、QuestionModelを配列形式で設定します。
質問に使用できる形式はこちらを参考にしてください。

new Vue({
  el: '#app',
  data: function() {
    return {
      language: new FlowForm.LanguageModel({
        enterKey:'エンターキー',
        shiftKey:'シフトキー',
        ok:'OK',
        continue:'続ける',
        skip:'スキップ',
        pressEnter:':enterKey を押してください',
        multipleChoiceHelpText:'好きなだけ選択してください',
        multipleChoiceHelpTextSingle:'回答を1つだけ選択してください',
        otherPrompt:'その他',
        placeholder:'ここに答えを入力してください...',
        submitText:'送信する',
        longTextHelpText:':shiftKey + :enterKey で改行します。',
        prev:'前へ',
        next:'次へ',
        percentCompleted:':percent% が完成',
        invalidPrompt:'フィールドに正しく入力してください',
        thankYouText:'回答終了です。ありがとうございます!',
        successText:'送信が送信されました。',
        ariaOk:'押して続行',
        ariaRequired:'このステップは必須です',
        ariaPrev:'前のステップ',
        ariaNext:'次のステップ',
        ariaSubmitText:'押して送信',
        ariaMultipleChoice:':letter を押して選択します',
        ariaTypeAnswer:'ここに答えを入力してください',
      }),
      questions: [
        new FlowForm.QuestionModel({ 
          title: '問題',
          type: FlowForm.QuestionType.MultipleChoice,
          required: true,
          options: [
            new FlowForm.ChoiceOption({
              label: '回答1'
            }),
            new FlowForm.ChoiceOption({
               label: '回答2'
            }),
            new FlowForm.ChoiceOption({
                label: '回答3' 
            }),
            new FlowForm.ChoiceOption({
                label: '回答4'
            })
          ]
        }),
        new FlowForm.QuestionModel({
          title: '今日の日付は?',
          type: FlowForm.QuestionType.Date,
          required: true,
        }),
        new FlowForm.QuestionModel({
           title: 'お名前を入力してください。',
           type: FlowForm.QuestionType.Text,
           required: true,
        }),
        new FlowForm.QuestionModel({
           title: 'パスワードを入力してください',
           type: FlowForm.QuestionType.Password,
           required: true,
         }),
      ]
    }
  }
});

 

step
3
テンプレートを準備

<flow-form>を設置します。

質問内容はquestionsプロパティに設定し、
要所に言葉はlanguageプロパティに設定します。

あとはテーマのCSSを呼び出せば勝手にレイアウト調整してくれます。

サンプルはケバブケースで記載しています。

<div id="app" >
  <flow-form v-bind:questions="questions" v-bind:language="language" />
</div> 

 

サンプル

今回のソースを実際に触って確認できるようにデモを用意しました。

See the Pen [Vue.js]超簡単に分岐フォームが作れるライブラリ「vue-flow-form」 by カバの樹 (@kabanoki) on CodePen.dark

 

さいごに

分岐のあるフォームを簡単に実装できるコンポーネントライブラリでした。

最近は仕事が忙しくて、サンプル作成の手が重かったのですが、このライブラリは久しぶりにヒットでした。
触っててめちゃめちゃ楽しかったです。

今日はこの辺でー

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-Form, UI Components, vue.js, Wizard, ライブラリ
-, , ,