Vue3を使用してjsで呼び出せるコンポーネントを実装する

Vue3を使用してjsで呼び出せるコンポーネントを実装する

序文

コンポーネント ライブラリは基本的にプロジェクト開発で使用されますが、特にメッセージ プロンプト ポップアップや確認ポップアップの場合、設計案のスタイルや機能はコンポーネント ライブラリのものと同じではない場合があります。プロジェクトやデザイナーごとに独自のスタイルがあります。ただし、コンポーネント ライブラリ内のコンポーネントを使用してスタイルをオーバーライドすることは可能です。ただし、一部のカスタマイズされた機能は、変更が簡単ではありません。この場合、カスタム コンポーネントを選択し、コンポーネント属性を通じてページに導入し、タグ呼び出しを明示的に記述します。ユーザーに簡単なプロンプトや操作を提供するメッセージ プロンプトの場合、最も一般的に使用される UI ライブラリは、js 呼び出しを通じて同様の機能をサポートしています。 UI ライブラリの呼び出しメソッドを参照して、js 関数によって呼び出されるカスタム コンポーネントを実装することもできます。

1. 従来のVueコンポーネント

確認ボックスを実装し、ボタンをクリックして確認ボックスを開き、確認ボックスの [OK] ボタンと [キャンセル] ボタンをクリックして確認ボックスを閉じ、対応するメソッドを呼び出す必要があるとします。

1. メインコンポーネントコード:

src/components/Confirm/Confirm.vue

2. 使用方法

3. 成果を達成する

2. js呼び出しコンポーネントへの変更

上記のコンポーネント呼び出し方法は非常に面倒です。さまざまな操作のコールバックの導入と処理の両方が必要です。また、コンポーネントの DOM ノードが現在のページの下に挿入され、スタイルがコンポーネントの内容によって上書きされたり、他の要因の影響を受けたりする可能性があります。

達成したい結果は、js 関数を介してコンポーネントを呼び出し、関数が promise を返し、then を確認して、catch をキャンセルすることです。次に例を示します。

確認する({
  タイトル: ''、
  メッセージ: ''
}).then(() => {
  // クリックして確認}).catch(() => {
  // クリックしてキャンセル })

1. 実装手順:

  • まず、Promise オブジェクトを返す必要があることを確認します。最初に promise オブジェクトを返すメソッドを作成します。
  • Vue の createApp メソッドを使用して、Confirm コンポーネント インスタンスを作成します。 createApp の 2 番目の引数を使用すると、コンポーネントに必要なデータを渡すことで、ルート プロパティをアプリケーションに渡すことができます。
  • コンポーネント インスタンスをマウントするためのコンテナーとして使用するノードを作成し、そのノードを本体に追加します。
  • 作成されたノードにコンポーネント インスタンスをマウントすると、コンポーネントの親は本体になり、呼び出し元のページの影響を受けなくなります。
  • [OK] をクリックすると、resolve が呼び出され、現在のコンポーネントがアンインストールされ、DOM が削除されます。 [キャンセル] をクリックすると、拒否が呼び出され、現在のコンポーネントがアンインストールされ、DOM が削除されます。

2. 具体的な実装コード:

Confirm コンポーネントの js 部分を変更し、props から onConfirm と onCancel を渡して、コンポーネント インスタンスの使用を容易にします。

// src/components/Confirm/Confirm.vue
<スクリプト>
エクスポートデフォルト{
  名前: '確認'、
  小道具: {
    タイトル:
      タイプ: 文字列、
      デフォルト: 'prompt'
    },
    メッセージ: {
      タイプ: 文字列、
      デフォルト: 'デフォルトのプロンプトメッセージ'
    },
    確認ボタンテキスト: {
      タイプ: 文字列、
      デフォルト: 「確認」
    },
    キャンセルボタンテキスト: {
      タイプ: 文字列、
      デフォルト: 'キャンセル'
    },
    確認時: {
      タイプ: 関数、
      デフォルト: () => {}
    },
    キャンセル時: {
      タイプ: 関数、
      デフォルト: () => {}
    }
  }
}
</スクリプト>

同じディレクトリに新しい index.js ファイルを作成し、props を通じて onConfirm や onCancel などのパラメータをコンポーネントに渡すと、インスタンス内でイベント コールバックを受け取ることができます。

// src/components/Confirm/index.js
'vue' から {createApp} をインポートします。
'./Confirm' から Confirm をインポートします
関数 confirm ({ タイトル、メッセージ、confirmBtnText、cancelBtnText }) {
  新しい Promise を返します ((resolve, reject) => {
    // コンポーネントをインスタンス化します。createApp の 2 番目のパラメータは props です。
    const confirmInstance = createApp(確認、{
      タイトル: タイトル || 'ヒント',
      メッセージ: メッセージ || 'メッセージを確認',
      confirmBtnText: confirmBtnText || '確認',
      cancelBtnText: cancelBtnText || 'キャンセル',
      確認時: () => {
        アンマウント()
        解決する()
      },
      キャンセル時: () => {
        アンマウント()
        拒否(新しいエラー())
      }
    })
    // コンポーネントをアンマウントする const unmount = () => {
      インスタンスのアンマウントを確認します。
      document.body.removeChild(親ノード)
    }
    // マウントコンテナを作成する const parentNode = document.createElement('div')
    document.body.appendChild(親ノード)
    //コンポーネントをマウントする confirmInstance.mount(parentNode)
  })
}

エクスポートデフォルト確認

コンポーネントの使用

設定 () {
  const showConfirm = () => {
    確認する({
      タイトル: 'タイトル',
      メッセージ: 'コンテンツ'
    }).then(() => {
      console.log('クリックして確認')
    }).catch(() => {
      console.log('キャンセルするにはクリックしてください')
    })
  }
  戻る {
    表示確認
  }
}

3. エフェクト表示を実現する

要約する

これで、Vue3 を使用して js から呼び出せるコンポーネントを実装する方法についての記事は終了です。Vue3 を使用して js から呼び出せるコンポーネントを実装する方法についてさらに詳しく知りたい場合は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue 親子コンポーネントの相互値の転送と呼び出し
  • Vueは複数のコンポーネントをカプセル化して同じインターフェースを呼び出す
  • Vue 親コンポーネントで子コンポーネント関数を呼び出す方法
  • Vue コンポーネント スロットの使用とコンポーネント内でのメソッドの呼び出しの詳細な説明
  • Vue 子コンポーネントは親コンポーネントと通信し、親コンポーネントは子コンポーネントのメソッドを呼び出します。
  • Vueの子コンポーネントが親コンポーネントのメソッドを呼び出す場合の詳細な説明

<<:  Linux ユーザーとグループのコマンド例分析 [切り替え、ユーザーの追加、権限制御など]

>>:  MySQL 文字列インデックスのより合理的な作成ルールに関する議論

推薦する

Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)

その理由はモッカー プラットフォームを導入したかったので、友人の勧めで既成のプロジェクト api-m...

JSに関する7つの面接の質問、あなたはいくつ正しく答えられますか

序文JavaScript では、これは関数呼び出しコンテキストです。この動作が非常に複雑であるからこ...

CSS3は小さな矢印のさまざまなグラフィック効果を実現します

CSS を使ってさまざまなグラフィックを実現できるのは素晴らしいことです。画像を切り取る必要はなく、...

フレームウィンドウ間の関連付けとハイパーリンクのターゲット属性の使用を実装する方法

フレーム ウィンドウの関連付けを実現するには、次に示すように、ハイパーリンクの「ターゲット」ウィンド...

Bootstrap5 ブレークポイントとコンテナの具体的な使用法

目次1. Bootstrap5 ブレークポイント1.1 モバイルファースト1.2 ブートストラップブ...

HTML で margin:0 auto を使用するとページ全体が中央に配置されない問題の解決方法

今日、jsp ページを書きました。<div style="margin:0 auto...

Mysqlはストアドプロシージャを通じて文字列を配列に分割します

文字列を配列に分割するには、次の 3 つの MySQL 関数を使用する必要があります。 REVERS...

計算機機能を実現するjsバージョン

この記事の例では、計算機機能を実装するためのjsの具体的なコードを参考までに共有しています。具体的な...

CSS で順序付きリスト項目と順序なしリスト項目のスタイルを設定する方法

順序なしリストでは、順序なしリストのシンボルは各リストの前に表示されるドットです。順序付きリスト o...

HTML でのメタタグと使用法の詳細な説明

これ以上無駄話をして時間を無駄にしないので、今日の話題を始めましょう。 HTML のメタタグ1. メ...

vue の webpack -v エラー解決の概要

XiaobaiはVueについて学び、次にwebpackについて学び、そしてさまざまなものをインストー...

CSS 属性セレクタを使用して HTML DNA を接合する方法

CSS 属性セレクターは素晴らしいです。大量のクラス名を追加することを回避し、コード内の問題を指摘す...

jQueryはドロップダウンメニューのスライド効果を実現します

Web ページを作成するときに、クールでスムーズなドロップダウン メニューが必要になることがあります...

ウェブ画像形式としてPNG、JPG、GIFを選択して使用する方法

では、GIF、PNG、JPG のどの形式を候補形式として選択すればよいのでしょうか。また、どの画像形...

W3C チュートリアル (14): W3C RDF および OWL アクティビティ

RDF と OWL は、2 つの重要なセマンティック ウェブ テクノロジーです。 RDF と OWL...