ドラッグアンドドロップでVueユーザーインターフェースを生成する方法

ドラッグアンドドロップでVueユーザーインターフェースを生成する方法

序文

少し前に何人かの友人を訪ねたのですが、彼らは皆、フロントエンドに長い間取り組んできたので、フロントエンドの開発に多くの時間を費やす必要があると言っていました。柔軟性を犠牲にすることなく開発効率を最大限に高めるという原則に基づいて、著者は、ドラッグアンドドロップによる Vue ユーザーインターフェイスの生成機能をフレームワークに補足的に統合し、追加、削除、変更、クエリインターフェイスの迅速な生成を容易にし、大画面表示や簡単な Web ページ制作にも使用できるようにしました。

1. 技術原理

1.1 レイアウト

現在は、vue-grid-layout に基づくグリッドレイアウトのみが実装されています。デザインキャンバス上の各コンポーネントは対応する GridItem に動的にロードされ、対応するプロパティとイベントはコンポーネント構成に従ってバインドされます。

<!--src/components/Designers/View/VueVisualDesigner.vue-->
<grid-layout ref="gridLayout" class="editorCanvas" :layout.sync="レイアウト"
        :col-num="レイアウトオプションのcolNum" :row-height="レイアウトオプションのrowHeight"
        :is-draggable="!preview" :is-resizable="!preview" @dragover.native="onDragOverGrid">
 <grid-item class="widgetPanel" v-for="レイアウト内のアイテム" :x="item.x" :y="item.y" :w="item.w"
    :h="item.h" :i="item.i" :key="item.i"
    @resize="onItemResize(item)" @container-resized="onItemResize(item)">
  <div v-if="!preview" class="widgetOverlay" @click="onSelectWidget(item)"></div>
  <!-- 動的ウィジェット -->
  <コンポーネント:ref="item.i":is="item.c":style="makeWidgetStyle(item)"
     v-model="runState[item.m]" v-bind="item.p" v-on="item.a">
   {{item.t}}
  </コンポーネント>
 </グリッドアイテム>
</グリッドレイアウト>

1.2 コンポーネント

各コンポーネントの構成は、次の例に示すインターフェイスに抽象化されており、コンポーネントのプロパティと関連するレイアウト位置情報を記述するために使用されます。これは、デザイン時プロパティと実行時プロパティに分かれていることに注意してください。実行時プロパティは、プレビューと実行時にのみ動的に生成されます。

//src/runtime/IVueVisual.ts
エクスポートインターフェースIVueLayoutItem{
 /** コンポーネント名 例: Input */
 n: 文字列;
 /** v-テキスト */
 t?: 文字列;
 /** v モデル */
 m?: 文字列;
 /** コンポーネントプロパティ 例: {size: 'mini'} */
 p: オブジェクト;
 /** コンポーネントにバインドされたプロパティ、例: {data:':data'} */
 b?: オブジェクト;
 /** デザインタイムイベント定義、例: {click: {IVueEventAction}} */
 e?: オブジェクト;
 /** 実行時に生成されるイベント ハンドラー。v-on バインディングに使用されます (例: {click: function(){...}}) */
 a?: オブジェクト;
 /** Vue コンポーネントは実行時に動的にロードされます*/
 c?: 任意;
}

/** グリッドベースのレイアウト項目*/
エクスポートインターフェースIVueGridLayoutItemはIVueLayoutItemを拡張します{
 i: 文字列;
 x: 数値;
 y: 数値;
 w: 数値;
 h: 数値;
}

1.3 ステータス

コンポーネントとレイアウトだけではインターフェース上にしか表示できず、ビジネスデータもバインドする必要があります。そのため、各ビューモデルには対応する状態設定(つまり、Vue のデータ)があり、状態名、タイプ、および対応する設定値の操作を記述します。ビューの状態は、実行時の設定に応じて、バックエンドからデータをロードするか、デフォルト値に設定します。

/** デザイン時のビューステート項目 */
エクスポートインターフェースIVueState{
 名前: 文字列;
 タイプ: 文字列;
 /**ステータス値を設定する操作。例: サービスを呼び出した後にステータス値を設定する*/
 値: IVueEventAction;
}

1.4 イベント

Button などの一部のコンポーネントは、対応するイベント処理にバインドできます。現在、イベント処理は主にデータの読み込み (LoadData) とデータの送信 (PostData) の 2 つのカテゴリに分かれており、バックエンドから現在の状態にデータを読み取り、現在の状態データをバックエンドに送信して処理することに対応しています。

エクスポート タイプ EventAction = 'LoadData' | 'PostData' | 'RunScript';

エクスポートインターフェースIVueEventAction {
 /** 操作タイプ、例: LoadData */
 読み取り専用タイプ: EventAction;
}

エクスポートインターフェースIVueLoadDataActionはIVueEventActionを拡張します{
 /** 状態ターゲット 例: State = LoadService() */
 状態: 文字列;
 サービス: 文字列; //バックエンドサービス: 例: sys.OrderService.listAll
 ServiceArgs: any[]; //例: [{Name:'arg1', Type:'string', Value:'"rick"'}], Value は式です}

1.5 ツールボックス

キャンバスにドラッグ アンド ドロップできるコンポーネントは、グローバル構成「VueWidgets」によって定義され、グローバルに登録されたコンポーネントとカスタム コンポーネントに分かれています。カスタム コンポーネントは、コード内または視覚的な形式でのビュー モデルにすることができます。

//カスタムウィジェット構成定義 {
 "Name": "Table", //コンポーネント名 "Component": "sys.ExTable", //カスタム ビュー モデルまたはグローバル コンポーネント名を指します (例: ElInput)
 "Icon": "fa fa-table", //ツールボックスアイコン "Width": 12, //デフォルトのグリッド幅 "Height": 6, //デフォルトのグリッド高さ "Props": [ //コンポーネントのプロパティ
 {
  "名前": "列",
  「タイプ」:「配列」、
  "デフォルト": []、
  "Editor": "sys.ExTableColumnEditor" //カスタム属性エディターを指します},
 {
  "名前": "行",
  「タイプ」:「配列」、
  "デフォルト": []
 }
 ]
}

2. 効果の実証

新しいビュー モデルを作成する場合、タイプ選択は Vue Visual であり、元のコード メソッドは Vue Code であることに注意してください。

設計インターフェースの機能領域を下図に示します。

具体的な操作方法については短いビデオをご覧ください。

要約する

ドラッグ アンド ドロップで Vue ユーザー インターフェイスを生成する方法については、これで終わりです。ドラッグ アンド ドロップで Vue ユーザー インターフェイスを生成する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueをベースにドラッグ効果を実現
  • Vue の一時停止されたドラッグ可能なフローティング ボタンのサンプル コード
  • Vue.Draggableはドラッグ効果を実現します
  • Vue ベースのドラッグ アンド ドロップ機能を実装する
  • Vue.Draggable ドラッグ機能の設定と使用方法
  • Vue カスタム ディレクティブ ドラッグ関数の例
  • ドラッグアンドドロップを使用してドラッグを実装するためのVueサンプルコード
  • Vueはdivドラッグアンドドロップを実装します
  • Vue をベースにスムーズな遷移のドラッグ アンド ドロップ ソート機能を実装する
  • Vueドラッグコンポーネント開発例の詳しい説明

<<:  Docker+Jenkins+Gitlab+Djangoアプリケーションデプロイ実践の詳細な説明

>>:  mysql binlog ログを正しくクリーンアップする 2 つの方法

推薦する

vue3 キャッシュページキープアライブと統合ルーティング処理の詳細な説明

目次1. はじめに2. 使用1. vue2とvue3の違い2. ページ上の一部のデータはキャッシュす...

grep を使用して MySQL エラー ログ情報を取得する方法の詳細な説明

MySQL のメンテナンスを容易にするために、エラー情報を収集するためのインターフェースを提供するス...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...

Mysql SQL ステートメントのコメント

MySQL SQL ステートメントにコメントを追加できます。MySQL SQL ステートメントのコメ...

React Router で履歴リダイレクトを使用する方法

react-routerでは、コンポーネント内のジャンプは<Link>で使用できます。し...

Vueカスタムコンポーネントは双方向バインディングを実装します

シナリオ:一般的に使用される親コンポーネントと子コンポーネント間の相互作用方法は次のとおりです。親コ...

MySQL データの集約とグループ化

多くの場合、データを実際に取得せずに要約する必要があり、 MySQLこの目的のために特別な関数を提供...

WMLとは何ですか?

WML (ワイヤレス マークアップ言語)。これは HTML から派生したマークアップ言語ですが、W...

Uniapp は DingTalk スキャンコード ログイン サンプル コードを実装します

UniappにはDingTalk認証ログインがないため、この記事ではDingTalk QRコードログ...

Reactでwindow.print()を使用した際にページが応答しなくなる問題の解決記録について

目次1. 問題の背景: 2. 問題の原因: 3. 問題解決:要約: 1. 問題の背景: window...

純粋な CSS で中空効果を実現するためのサンプルコード

私は最近、空洞化効果について研究しました。背景クリップ: テキスト背景はテキストの前景色にクリップさ...

JSはストップウォッチタイマーを実装します

この記事の例では、ストップウォッチタイマーを実装するためのJSの具体的なコードを参考までに共有してい...

Msyql トランザクション分離について知っておくべきこと

トランザクションとは何ですか?トランザクションは、データベース管理システムの実行プロセスにおける論理...

jsは古典的なマインスイーパゲームを実装します

この記事の例では、古典的なマインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有し...

CSS XTHML の記述標準とよくある問題の概要 (ページ最適化)

プロジェクトドキュメントディレクトリDiv+CSS 命名規則 - 4 - Div+css 命名規則 ...