ドラッグアンドドロップで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 つの方法

推薦する

セマンティック HTML タグの紹介

ここ数年、ウェブサイト開発では DIV+CSS が非常に人気があり、当時は大きな騒動を引き起こしまし...

MySQL での r2dbc の使用に関する詳細な理解

導入MySQL は、私たちが日常業務で使用する非常に一般的なデータベースです。MySQL は現在 O...

MySQLデータベースでの値の追加、変更、削除、クリアの例

3. MySQLデータ管理最初の方法:お勧めできません。複雑そうです -- 学生テーブルの grad...

select count() と select count(1) の違いと実行方法

Count(*) または Count(1) または Count([column]) は、おそらく S...

仮想マシンUbuntu 16.04がインターネットに接続できない問題の解決策

Ubuntu をインストールしたばかりですが、開いたときにネットワーク接続がありませんでした。右上隅...

MySQL インデックスのパフォーマンス最適化の問題に対する解決策

MySQL によって作成される最適化はインデックスを追加することですが、インデックスを追加しても目的...

Linux でのソース パッケージ インストールのサービス管理

目次1. ソースパッケージサービスの起動管理2. ソースパッケージサービスのセルフスタート管理3. ...

ドロップダウンメニューを実現するためのHTML+CSS

1. ドロップダウンリストの例コードは次のとおりです。 <!doctypehtml> ...

Centos7にnginxをインストールする方法

必要な環境をインストールする1. gccのインストールnginx をインストールするには、公式サイト...

間違った MySQL コマンドをキャンセルしたい場合はどうすればいいですか?

間違った mysql コマンドを入力したのでキャンセルしたいです。どうすればいいですか? ctrl ...

Linuxカーネルとデバイスツリーのコンパイルと書き込みを分析する

目次1. 材料を準備する2. Linuxカーネルファイルをダウンロードする3. コンパイル4. TF...

JavaScript シングルスレッドと非同期の詳細

目次1. タスクキュー2. 混乱を招く問題を説明する1. setTimeout(f1,0)とは何です...

elasticsearchを使用してインデックスデータを定期的に削除する

1. ESを使うこともあるリソースが限られている、またはビジネス上のニーズにより、最新の期間のデータ...

仮想マシンのLinux初心者がIPを設定し、ネットワークを再起動する

仮想マシンを初めて使用する方や、仮想マシンに Linux をインストールしたばかりの方は、システムが...

Vue3 の参照と参照の詳細

エディターは、Vue3のデータの関連する問題も共有します。次のような例を見てみましょう。 Vue.c...