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

推薦する

vue-qr を使用して Vue の QR コードを生成する方法について深く理解する

目次npm ダウンロードステップ(1)輸入(2)vue-qrパラメータ例要約する「QRコード」の英語...

WeChatアプレットはユーザーログインモジュールサーバーの構築を実装します

サーバーの構築には node.js を選択しました。まだインストールしていない方は、私の他の nod...

MySQL ピボットテーブルについての簡単な説明

次のような製品部品表があります。一部 部品ID 部品タイプ 製品ID ---------------...

MySQLのダウンロードとインストールのプロセスの詳細な説明

1: MySqlをダウンロードする公式サイトのダウンロードアドレス: https://dev.mys...

JavaScript プロトタイプオブジェクトの this ポイント問題の詳細な説明

目次1. これは2. この点を修正する1. call() メソッド2. apply() メソッド要約...

Vue Elementのテーブルコンポーネントをカプセル化する方法

Vue コンポーネントをカプセル化する場合でも、機能コンポーネントをクロスファンクショナルに使用しま...

Alibaba Cloud ECS centos6.8 に MySql5.7 をインストールして設定するチュートリアル

Alibaba Cloud yum コマンドでのデフォルトの MySQL バージョンは 5.17**...

OpenLayers 3 のベクターマップソースの読み込みの問題を解決する

1. ベクターマップベクター グラフィックスは直線と曲線を使用してグラフィックスを表します。これらの...

Dockerが独自のローカルイメージリポジトリを構築するための手順

1. 環境と準備1. Ubuntu 14.04 2.Docker環境2. 建設プロセス1. ミラーソ...

Axios はリクエストをキャンセルし、重複リクエストを回避します

目次起源現状リクエストをキャンセル cancelTokenリクエスト方法の変更重複したリクエストを避...

垂直方向の中央揃えをエレガントに実現する方法を教えます(推奨)

序文CSS で水平方向と垂直方向に中央揃えする方法はたくさんあります。この記事で紹介する方法は非常に...

純粋な CSS3+DIV で小さな三角形の境界線効果を実現するためのサンプル コード

具体的なコードは次のとおりです。 HTMLコードは次のとおりです <div class=&qu...

MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明

MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明itemcontractprice ...

html+vue+element-ui のスムーズさを 1 分で体験

テクノロジーファンHTMLウェブページ、知っておくべきYouyou が開発した vue フロントエン...

Linux デスクトップ用の 4 つのスキャン ツール

ペーパーレスの世界はまだ到来していませんが、書類や写真をスキャンすることで紙をなくす人が増えています...