<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wws.jp/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wws.jp/feed.php">
        <title>Wiki and Web Service vuejs:vue3</title>
        <description></description>
        <link>https://wws.jp/</link>
        <image rdf:resource="https://wws.jp/_media/favicon.ico" />
       <dc:date>2026-05-14T08:22:48+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/ace9_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/checkbox_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/combo_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/filter?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/form_styles?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/form_utils?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/input_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_checkbox_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_combo_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_input_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_radio_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_select_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_switch_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_textarea_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/labeled_two_inputs_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/load_from_cdn?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/modal_container?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/paginator?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/radio_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/select_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/start?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/svg_loading_indicator?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/switch_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/textarea_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/two_inputs_form?rev=1734489134&amp;do=diff"/>
                <rdf:li rdf:resource="https://wws.jp/vuejs/vue3/vue_draggable_next?rev=1734489134&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wws.jp/_media/favicon.ico">
        <title>Wiki and Web Service</title>
        <link>https://wws.jp/</link>
        <url>https://wws.jp/_media/favicon.ico</url>
    </image>
    <item rdf:about="https://wws.jp/vuejs/vue3/ace9_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x Ace9 Form コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/ace9_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x Ace9 Form コンポーネント

要求

	*  Ace9 Editor のエラーメッセージ表示付きコンポーネント
	*  v-model 対応

コード


import { computed, nextTick, onMounted, reactive, watch } from &#039;https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.esm-browser.js&#039;;
import * as Util from &#039;https://wws.jp/_export/code/vuejs/vue3/form_utils?codeblock=0&#039;;

const Ace9Form = {
  template: `
    &lt;div :class=&quot;computedControlWrapperClasses&quot; :style=&quot;controlWrapperStyles&quot;&gt;
      &lt;pre :id=&quot;state.editorId&quot; :style=&quot;editorStyle&quot;&gt;&lt;/pre&gt;
      &lt;div :c…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/checkbox_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x CheckboxForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/checkbox_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x CheckboxForm コンポーネント

要求

	*  checkbox タグのエラーメッセージ表示付きコンポーネント
	*  複数の選択候補から選択する複数チェックボックスとして機能させたい 
	*  単一フィールドの Boolean 値切り替え用途は</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/combo_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x ComboForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/combo_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x ComboForm コンポーネント

要求

	*  以下のタイプを実装するボタンとエラーメッセージ表示付き input コンポーネント （但し、ボタン部分はエラー色にならない）
		*  text
		*  password</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/filter?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Filter</title>
        <link>https://wws.jp/vuejs/vue3/filter?rev=1734489134&amp;do=diff</link>
        <description>Filter

要望・要求

	*  レコードの一覧を絞り込む際に指定する、複雑な検索条件の設定を実装したい。
	*  フィールド定義をもとに自動的に生成できるとよい。
	*  一旦設定した検索条件を保存し、再利用できるようにしたい。</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/form_styles?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x Form 用の CSS ライブラリ</title>
        <link>https://wws.jp/vuejs/vue3/form_styles?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x Form 用の CSS ライブラリ


@media screen and (min-width: 768px) {
  .sm-text-right {
    text-align: right;
  }

  div.table-form-wrapper {
    display: flex;
    margin-left: 5px;
    margin-right: 5px;
  }
  div.table-form-wrapper:first-child &gt; div {
    border-top:    1px solid lightgray;
  }
  div.table-label-wrapper {
    padding: 13px 12px 4px 12px;
    border-right:  1px solid lightgray;
    border-bottom: 1px solid lightgray;
    border-left:   1px solid lightgray;
    background-col…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/form_utils?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x Form 用の JS ライブラリ</title>
        <link>https://wws.jp/vuejs/vue3/form_utils?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x Form 用の JS ライブラリ



export function appendScript(src, integrity, crossorigin, onLoad) {
  const el = document.createElement(&#039;script&#039;);
  el.src = src;
  if (integrity)   el.integrity   = integrity;
  if (crossorigin) el.crossorigin = crossorigin;
  el.addEventListener(&#039;load&#039;, onLoad, {once: true});
  document.body.appendChild(el);
}

export function appendCss(URL) {
  const el = document.createElement(&#039;link&#039;);
  el.href = URL;
  el.rel = &#039;stylesheet&#039;;
  el.type = &#039;text/css&#039;;
  documen…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/input_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x InputForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/input_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x InputForm コンポーネント

要求

	*  input の以下のタイプを実装するエラーメッセージ表示付きコンポーネント 
		*  text
		*  password
		*  email
		*  url
		*  number
		*  date
		*  time
		*  file デザイン的に無理だった。。。</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_checkbox_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x LabeledCheckboxForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/labeled_checkbox_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x LabeledCheckboxForm コンポーネント

要求

	*  Checkbox タグのラベル付きコンポーネント 
	*  v-model 対応
	*  再利用可能なコンポーネントとする。

コード


import LabeledForm  from &#039;/_export/code/vuejs/vue3/labeled_form?codeblock=0&#039;;
import CheckboxForm from &#039;/_export/code/vuejs/vue3/checkbox_form?codeblock=0&#039;;

const LabeledCheckboxForm = {
  template: `
    &lt;labeled-form
      :errors=&quot;errors&quot;
      :label-text=&quot;labelText&quot;
      :form-wrapper-classes=&quot;formWrapperClasses&quot;
      :form-wrapper-styles=&quot;formWrapperStyles&quot;
      :label-…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_combo_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x LabeledComboForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/labeled_combo_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x LabeledComboForm コンポーネント

要求

	*  input の以下のタイプを実装するラベル付きコンポーネント 
		*  text
		*  password
		*  email
		*  url
		*  number
		*  date
		*  time

	*  v-model 対応
	*  再利用可能なコンポーネントとする。</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x で作る LabeledForm</title>
        <link>https://wws.jp/vuejs/vue3/labeled_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x で作る LabeledForm

要求

	*  ラベル、入力コントロールを再利用可能な形でレイアウトしたい.
	*  モバイル向けでないレイアウトの場合、ラベルと入力コントロールのラッパーの高さを同じにしたい.</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_input_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x LabeledInputForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/labeled_input_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x LabeledInputForm コンポーネント

要求

	*  input の以下のタイプを実装するラベル付きコンポーネント 
		*  text
		*  password
		*  email
		*  url
		*  number
		*  date
		*  time

	*  v-model 対応
	*  再利用可能なコンポーネントとする。</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_radio_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x LabeledRadioForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/labeled_radio_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x LabeledRadioForm コンポーネント

要求

	*  Radio タグのラベル付きコンポーネント 
	*  v-model 対応
	*  再利用可能なコンポーネントとする。

コード


import LabeledForm  from &#039;/_export/code/vuejs/vue3/labeled_form?codeblock=0&#039;;
import RadioForm from &#039;/_export/code/vuejs/vue3/radio_form?codeblock=0&#039;;

const LabeledRadioForm = {
  template: `
    &lt;labeled-form
      :errors=&quot;errors&quot;
      :label-text=&quot;labelText&quot;
      :form-wrapper-classes=&quot;formWrapperClasses&quot;
      :form-wrapper-styles=&quot;formWrapperStyles&quot;
      :label-wrapper-classes…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_select_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x LabeledSelectForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/labeled_select_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x LabeledSelectForm コンポーネント

要求

	*  SELECT タグのラベル付きコンポーネント 
	*  v-model 対応
	*  再利用可能なコンポーネントとする。

コード


import LabeledForm from &#039;/_export/code/vuejs/vue3/labeled_form?codeblock=0&#039;;
import SelectForm   from &#039;/_export/code/vuejs/vue3/select_form?codeblock=0&#039;;

const LabeledSelectForm = {
  template: `
    &lt;labeled-form
      :errors=&quot;errors&quot;
      :label-text=&quot;labelText&quot;
      :form-wrapper-classes=&quot;formWrapperClasses&quot;
      :form-wrapper-styles=&quot;formWrapperStyles&quot;
      :label-wrapper-c…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_switch_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x LabeledSwitchForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/labeled_switch_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x LabeledSwitchForm コンポーネント

要求

	*  Checkbox タグのラベル付きコンポーネント 
	*  v-model 対応
	*  再利用可能なコンポーネントとする。

コード


import LabeledForm  from &#039;/_export/code/vuejs/vue3/labeled_form?codeblock=0&#039;;
import SwitchForm from &#039;/_export/code/vuejs/vue3/switch_form?codeblock=0&#039;;

const LabeledSwitchForm = {
  template: `
    &lt;labeled-form
      :errors=&quot;errors&quot;
      :label-text=&quot;labelText&quot;
      :form-wrapper-classes=&quot;formWrapperClasses&quot;
      :form-wrapper-styles=&quot;formWrapperStyles&quot;
      :label-wrapper-…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_textarea_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x LabeledTextareaForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/labeled_textarea_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x LabeledTextareaForm コンポーネント

要求

	*  textarea を実装するラベル付きコンポーネント 
	*  v-model 対応
	*  再利用可能なコンポーネントとする。
	*  指定可能な属性が異なるため、$attr をバインドするが、対応できない場合は別のコンポーネントとしてで作成する。</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/labeled_two_inputs_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x LabeledTwoInputsForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/labeled_two_inputs_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x LabeledTwoInputsForm コンポーネント

要求

	*  2 つのテキスト入力を実装するラベル付きコンポーネント 
	*  v-model 対応
	*  再利用可能なコンポーネントとする。
	*  指定可能な属性が異なるため、$attr をバインドするが、対応できない場合は別のコンポーネントとしてで作成する。</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/load_from_cdn?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x を CDN からロードする</title>
        <link>https://wws.jp/vuejs/vue3/load_from_cdn?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x を CDN からロードする

ESM 形式でのライブラリロードに挑戦します。

サンプルコード

Vue というグローバルオブジェクトを呼び出す形で実装したかったのですがオブジェクトが見つからず、その中身である createApp などを直接呼び出す様です。</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/modal_container?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Modal Dialog</title>
        <link>https://wws.jp/vuejs/vue3/modal_container?rev=1734489134&amp;do=diff</link>
        <description>Modal Dialog

要求

	*  素早く簡単に Modal Dialiaog が実装できるよう、コンポーネント化したい。

Code


import { ref, reactive } from &#039;https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.esm-browser.js&#039;;

const ModalContainer = {
  template: `
  &lt;component is=&quot;style&quot;&gt;
  .modal {
    display: none;
  }
  .modal-backdrop {
    z-index: 0;
    background: rgba(0, 0, 0, 0.4);
  }
  /* vueのtransitionを使わないなら不要 */
  .fade-enter-active, .fade-leave-active {
    transition: opacity .15s;
  }
  .fade-enter, .fade-leave-to {
    opaci…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/paginator?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Paginator</title>
        <link>https://wws.jp/vuejs/vue3/paginator?rev=1734489134&amp;do=diff</link>
        <description>Paginator

この実装を Vue3 用に移植してみました。

&lt;https://github.com/lokyoung/vuejs-paginate/blob/master/src/components/Paginate.vue&gt;

実際にリストに実装しての確認は、まだしていません。。。

Code


import { onBeforeUpdate, ref, computed } from &#039;https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.esm-browser.js&#039;;

const Paginator = {
  template: `
  &lt;component is=&quot;style&quot;&gt;
    ul.paginator a { cursor: pointer; }
  &lt;/component&gt;
  &lt;ul class=&quot;paginator&quot; :class=&quot;containerClass&quot; v-if=&quot;!noLiSurround&quot;&gt;
    &lt;li v-if=&quot;firstLastButton&quot; :class=&quot;[p…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/radio_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x RadioForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/radio_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x RadioForm コンポーネント

要求

Radio タグのエラーメッセージ表示付きコンポーネント 

コード


import { computed } from &#039;https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.esm-browser.js&#039;;
import { getWrapClass, generalizeOptions } from &#039;https://wws.jp/_export/code/vuejs/vue3/form_utils?codeblock=0&#039;;

const RadioForm = {
  template: `
    &lt;div :class=&quot;computedControlWrapperClasses&quot; :style=&quot;controlWrapperStyles&quot;&gt;
      &lt;label v-for=&quot;(opt, idx) in computedOptions&quot;
        :class=&quot;optionClasses&quot;
        :style=&quot;optionSt…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/select_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x SelectForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/select_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x SelectForm コンポーネント

要求

select タグのエラーメッセージ表示付きコンポーネント 

コード


import { computed } from &#039;https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.esm-browser.js&#039;;
import { getWrapClass, generalizeOptions } from &#039;https://wws.jp/_export/code/vuejs/vue3/form_utils?codeblock=0&#039;;

const SelectForm = {
  template: `
    &lt;div :class=&quot;computedControlWrapperClasses&quot; :style=&quot;controlWrapperStyles&quot;&gt;
      &lt;select class=&quot;form-control&quot;
        :class=&quot;controlClasses&quot;
        :style=&quot;controlStyles&quot;
     …</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/start?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>v3</title>
        <link>https://wws.jp/vuejs/vue3/start?rev=1734489134&amp;do=diff</link>
        <description>v3

v2 からの変更点

v3.x でも 引き続き Options API が使えるようですが、後学のために自作コンポーネントは Composition API で構築してみます。

v3.x ではカスタムコンポーネントを v-model 対応にする場合、:target 指定が必須になったようです。v3.x から複数 v-model 対応が可能になったことによる変更と思われます。</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/svg_loading_indicator?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue3 SVG Loading Indicator コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/svg_loading_indicator?rev=1734489134&amp;do=diff</link>
        <description>Vue3 SVG Loading Indicator コンポーネント

コード


const SvgLoading = {
    template: `
      &lt;div&gt;
        &lt;component is=&quot;style&quot;&gt;
          .shade {
            position: fixed;
            display: flex;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: #333;
            opacity: 0.7;
            justify-content: center;
            align-items: center;
            z-index: 9999;
          }
        &lt;/component&gt;
        &lt;div class=&quot;shade…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/switch_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x SwitchForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/switch_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x SwitchForm コンポーネント

要求

	*  checkbox を Boolean 値の制御に使用するコンポーネント

コード


import { computed } from &#039;https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.esm-browser.js&#039;;
import { getWrapClass, generalizeOptions } from &#039;https://wws.jp/_export/code/vuejs/vue3/form_utils?codeblock=0&#039;;

const CheckboxForm = {
  template: `
    &lt;div :class=&quot;computedControlWrapperClasses&quot; :style=&quot;controlWrapperStyles&quot;&gt;
      &lt;label&gt;
        &lt;input type=&quot;checkbox&quot;
          :class=&quot;controlClasses&quot;
          :st…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/textarea_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x Textarea Form コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/textarea_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x Textarea Form コンポーネント

要求

	*  textarea のエラーメッセージ表示付きコンポーネント
	*  v-model 対応

コード


import { computed } from &#039;https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.esm-browser.js&#039;;
import { getWrapClass } from &#039;https://wws.jp/_export/code/vuejs/vue3/form_utils?codeblock=0&#039;;

const TextareaForm = {
  template: `
    &lt;div :class=&quot;computedControlWrapperClasses&quot; :style=&quot;controlWrapperStyles&quot;&gt;
      &lt;textarea class=&quot;form-control&quot;
        :class=&quot;controlClasses&quot;
        :style=&quot;controlStyles&quot;…</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/two_inputs_form?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x TwoInputsForm コンポーネント</title>
        <link>https://wws.jp/vuejs/vue3/two_inputs_form?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x TwoInputsForm コンポーネント

要求

	*  2 つの text input を実装するエラーメッセージ表示付きコンポーネント 
	*  v-model 対応

コード


import { computed } from &#039;https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.11/vue.esm-browser.js&#039;;
import { getWrapClass } from &#039;https://wws.jp/_export/code/vuejs/vue3/form_utils?codeblock=0&#039;;

const TwoInputsForm = {
  template: `
    &lt;div :class=&quot;computedFirstControlWrapperClasses&quot; :style=&quot;controlWrapperStyles&quot;&gt;
      &lt;input class=&quot;form-control&quot; :type=&quot;type&quot;
        :class=&quot;controlClasses&quot;
 …</description>
    </item>
    <item rdf:about="https://wws.jp/vuejs/vue3/vue_draggable_next?rev=1734489134&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-18T02:32:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Vue.js 3.x で vue.draggable.next を 試す</title>
        <link>https://wws.jp/vuejs/vue3/vue_draggable_next?rev=1734489134&amp;do=diff</link>
        <description>Vue.js 3.x で vue.draggable.next を 試す

&lt;https://github.com/SortableJS/vue.draggable.next&gt;

デモはこちら。&lt;https://sortablejs.github.io/vue.draggable.next/#/simple&gt;

テーブルでのサンプル

&lt;https://github.com/SortableJS/vue.draggable.next/blob/master/example/components/table-example.vue&gt;

を実行してようと思ったが、デモの main.js を見ると

&lt;https://github.com/SortableJS/vue.draggable.next/blob/master/example/main.js&gt;

依存するものが他にもあるようで、いったん断念。。。…</description>
    </item>
</rdf:RDF>
