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

推薦する

ページを更新せずにフォームを送信するには iframe を使用します

そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...

mysql8.0.23 Linux (centos7) のインストールの完全かつ詳細なチュートリアル

目次リレーショナルデータベースとは何ですか?非リレーショナルデータベースとは何ですか? MySQL ...

Apache ソースコードのインストールと仮想ホストの設定に関する詳細なチュートリアル

ソースからApacheをインストールする1. Apacheソースコードをアップロードして必要なソフト...

Linux の特別な権限 SUID、SGID、SBIT の詳細な説明

序文Linux のファイルまたはディレクトリの権限については、通常の rwx 権限についてすべて知っ...

jQueryは従業員情報の追加と削除の機能を実装します

この記事では、従業員情報の追加と削除の機能を実装するためのjQueryの具体的なコードを参考までに共...

Win2008 R2 mysql 5.5 zip 形式 mysql のインストールと設定

Win2008 R2 zip形式のMySQLのインストールと設定1. Baidu MySQL 5.6...

MySQL でのバイナリ型操作

この記事は主にMySQLデータベースのバイナリ型操作を紹介し、具体的な内容を通して紹介します。MyS...

nginx プロキシ サーバーで双方向証明書検証を構成する方法

証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...

vitrualBox+ubuntu16.04 python3.6 最新チュートリアルと詳細な手順のインストール

最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...

proxy_pass を設定した後に Nginx が 404 を返す問題を解決する

目次1. proxy_pass を設定した後に Nginx が 404 を返す問題のトラブルシューテ...

MYSQL開発パフォーマンス調査:バッチデータ挿入の最適化方法

1. どのような問題に直面しましたか?標準 SQL では、通常、次の SQL 挿入ステートメントを記...

本をめくる効果を実現するネイティブJS

この記事では、ネイティブ JS で実装された本をめくる効果の図を紹介します。効果は次のとおりです。 ...

SSM VUE Axios の詳細な説明

目次SQL ログを表示するにはどうすればいいですか? ? SpringMVC でのパラメータ渡しの説...

MySQL InnoDB の重要なコンポーネントの概要

Innodbには以下のコンポーネントが含まれています1. innodb_buffer_pool:これ...

Vueスロットの詳細な説明

1. 機能: 親コンポーネントが子コンポーネントの指定された位置に HTML 構造を挿入できるように...