Vue.js ドロップダウン コンポーネント付きテキストボックス

Vue.js ドロップダウン コンポーネント付きテキストボックス

ドロップダウン付きのテキストボックスを使用すると、ユーザーはドロップダウン リストから入力を選択したり、入力値を自由に入力したりできます。これは比較的一般的な UI 要素です。ユーザーに代替オプションを提供して操作時間を節約したり、少数の状況に適応する可能性を提供したりすることもできます。

当初、このコンポーネントは非常に一般的で、そのまま適用できる既成の例がたくさんあるはずだと考えていました。しかし、調べてみると、多くの類似コンポーネントには、検索、複数選択など、機能が多すぎることがわかりました(一言で言えば、複雑すぎるのです)。そこで、シンプルで使いやすいものを自分で書いてみようと思いました。困惑していたときにとても助けていただいたフェイさんに感謝したいと思います。

この UI 要素は、Common Bar Width アプリで使用されます。

コンポーネントの登録

カプセル化されたコンポーネント コードをコピーして貼り付け、グローバル コンポーネントを登録します。

設計時には、テキスト入力ボックス、数値入力ボックス、パーセンテージ入力ボックスなど、さまざまな種類の入力ボックスが存在する可能性があることが考慮されました。したがって、カプセル化されたコード内の入力を制限するために、 inputRule関数が使用されます。制限方法は、正規表現を使用してフィルタリングすることです。他のタイプがある場合は、 inputRuleでフィルタリング条件を変更することもできます。

<script type="text/x-template" id="ドロップダウン">
    <div class="dropdown" v-if="オプション">
        <!-- ドロップダウン入力 -->
        <input :type="タイプ"
                :disabled="無効"
                v-model="入力値"
                @focus="オプションを表示()"
                @blur="終了()"
                @keyup="キーモニター"
                @input="input_value = inputRule(type)" />
...
</スクリプト>
<スクリプト>
    Vue.component('ドロップダウン', {
        テンプレート: '#dropdown',
        小道具: {
            タイプ: 文字列、
            オプション: 配列、
            無効: ブール値、
            値: 文字列
        },
...
        メソッド: {
            入力ルール:関数(タイプ){
                var 値;
                スイッチ(タイプ){
                    ケース 'テキスト':
                        値 = this.input_value.replace(/[^a-zA-Z0-9]/g,'');
                        壊す;
                    ケース '番号':
                        値 = this.input_value.replace(/^(?![+-]?\d+(\.\d+)?$)/g,'');
                        壊す;
                    ケース「パーセンテージ」:
                        値 = this.input_value.replace(/[^\d]/g,'');
                        値 = 値 > 100 ? '100' : 値;
                        値 = 値 < 0 ? '0' : 値;
                        壊す;
                    デフォルト:
                        console.log("制限なし");
                }
                戻り値;
            },
...
</スクリプト>

コンポーネントの呼び出し

カスタム ラベル呼び出しコンポーネントを追加します。

<ドロップダウンタイプ = "テキスト"
            :options = "テキストオプション" 
            :value = "テキスト値"
            :disabled = "テキストが無効" 
            @on_change_input_value = "テキスト変更時">
</ドロップダウン>

データの受け渡し

最後に、props でデータを親コンポーネントに動的にバインドします。

  • type: 入力ボックスのタイプ。現在はテキスト、数値、パーセンテージをサポートしています。
  • オプション: 入力ボックスのドロップダウンリストのオプション
  • 値: 入力ボックスの値
  • 無効: 入力ボックスのクリックを禁止するかどうか

さらに、入力ボックスの値を更新するために親インスタンスで定義する必要もあります。

on_change_input_value: 値を更新する

データ: 関数 () {
    戻る {
        テキスト値: 'ccc',
        text_disabled: 偽、
        テキストオプション: [
            { id: 1、名前: 'a' },
            { id: 2、名前: 'bb' },
            { id: 3、名前: 'ccc' },
            { id: 4、名前: 'dddd' },
            { id: 5, 名前: 'eeeee' },
            { id: 6, 名前: 'fffff ' },
            { id: 7, 名前: 'gggggg' },
            { id: 8、名前: 'hhhhhhh' },
            { id: 9, 名前: 'iiiiiii' },
        ]、
        ...
    }
},
...
メソッド: {
    onTextChange: 関数 (新しいテキスト値) {
        this.text_value = 新しいテキスト値;
    },
...
},

ソースコード

GitHub

これで、Vue.js Textbox with Dropdown コンポーネントに関するこの記事は終了です。Vue.js Textbox with Dropdown コンポーネントの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue.jsデジタル入力ボックスコンポーネントの使い方の詳細な説明
  • JS は Alipay 入力テキスト入力ボックス拡大コンポーネントの例を模倣します
  • JavaScript コンポーネント開発: 入力ボックスと候補ボックス
  • JSは正規表現を使用して、入力ボックスを小数点以下2桁の整数と小数点(金額または現金)のみに制限します。
  • js と jQuery リアルタイム監視入力ボックスの値 oninput と onpropertychange メソッド
  • jsは入力ボックスの値の即時変更を監視します。onpropertychange、oninput
  • JSはWebページ上に入力ボックスをポップアップする方法を実装します
  • jsは入力ボックスのtype属性を動的に変更します(実装方法の分析)
  • jsは入力ボックスの値のリアルタイムの変化を監視します
  • JavaScriptは入力ボックスコンポーネントを実装します

<<:  MySQL の 2 種類の一時テーブルの使用方法の詳細な説明

>>:  Nginx におけるサーバーとロケーションのマッチングロジックの詳細な理解

推薦する

マインスイーパゲームを実装するための jQuery プラグイン (1)

この記事では、jQueryプラグインを使用したマインスイーパゲームの最初の記事の具体的なコードを参考...

WEB2.0の片手ルール

<br />前回のCSSに関する記事は、多くの人にあまり理解されませんでした。そのため、...

Mysql マスタースレーブ同期構成の実践の詳細な説明

1. はじめに以前、「MySQL マスター スレーブ同期の原理」という記事を書きました。この記事を読...

よく使われる3つのMySQLデータ型

MySQL のデータ フィールドのタイプを定義することは、データベースを最適化するために非常に重要で...

Linuxカーネルマクロcontainer_ofの詳細な分析

1. 前述の通り数年前、Linux ドライバーのコードを読んでいたときにこのマクロを見ました。長い間...

Dockerコンテナがホストポートにアクセスできない場合の解決策

最近、仕事中に問題が発生しました。Docker コンテナがホストの redis にアクセスできず、t...

MySQL 数千万のビッグデータに対するSQLクエリ最適化の知識ポイントのまとめ

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

Vue は動的なプログレスバー効果を実現します

この記事では、動的なプログレスバー効果を実現するためのVueの具体的なコードを例として紹介します。具...

GolangでMySQLデータベースを操作するための実装コード

序文Golang は、SQL データベースにアクセスするための database/sql パッケージ...

CSS コンテンツ属性を使用して、マウスホバープロンプト (ツールチップ) 効果を実現します。

なぜこのような効果を実現するのでしょうか。実は、この効果もタイトルプロンプトから派生したものですが、...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

フローティングメニューを実装するjQueryプラグイン

毎日jQueryプラグインを学ぶ - フローティングメニュー、参考までに、具体的な内容は次のとおりで...

vue-router 履歴モード サーバー側設定プロセス記録

歴史ルート履歴モードとは、HTML5 の履歴 API を使用してクライアント側ルーティングを実装する...

Flex プログラム Firefox で中国語を入力すると文字化けするバグ

Firefox の下位バージョンでは中国語の文字を入力できず、上位バージョンでは文字化けした文字が表...

DockerにMySQLをインストールする方法

最近 Django を導入しましたが、MySQL を手動でインストールしたくなかったので、Docke...