v-html レンダリング コンポーネントの問題

v-html レンダリング コンポーネントの問題

以前 HTML を解析したことがあるので、今日は Vue ドラッグ アンド ドロップを使用して、Kuai Station と同様の自動コード生成を実現したいと思います。その結果、Vue の v-html は XSS 攻撃を防ぐために HTML しか解析できないため、以前はドラッグ コンポーネントを解析できないという問題に遭遇しました。

アイデア

まず、左、中央、右の3つの部分に分かれたシンプルなページを実装します。左側はドラッグする必要があるコンポーネント、中央はコンポーネントの配置と表示に使用され、右側は解析されたコードです。

左側のコンポーネントリストコード

  <div ref="テスト">
    <one-component :title="title[0]" element="<el-radio v-model='radio' label='1'>代替オプション</el-radio>"> 
      <el-radio slot="component" v-model="radio" label="1">オプション</el-radio>
    </1 つのコンポーネント>
  </div>
</テンプレート>

<スクリプト>
'../components/oneComponent' から OneComponent をインポートします。
エクスポートデフォルト{
  名前: ''、
  データ() {
    戻る {
        ラジオ: '2',
        タイトル: ['ラジオシングルチェックボックス']
    }
  },
  コンポーネント:{
    ワンコンポーネント
  },
 

}
</スクリプト>

<style lang="stylus" スコープ>
</スタイル>

中間コンポーネント表示コード

  <div class="all">
    <el-form label-width="80px" label-position="left" :model="ruleForm" :rules="rules">
      <el-form-item label="シミュレートされた幅" prop="inputW">
        <el-input v-model="ruleForm.inputW" placeholder="幅を入力してください"></el-input>
      </el-form-item>
      <el-form-item label="シミュレーションの高さ" prop="inputH">
        <el-input v-model="ruleForm.inputH" placeholder="身長を入力してください"></el-input>
      </el-form-item>
    </el-form>
    <変数ボックス
      クラス="ボックス"
      :width="ruleForm.inputW"
      :height="ruleForm.inputH"
    </変数ボックス>
  </div>
</テンプレート>
<スクリプト>
「../components/Variablebox」からVariableboxをインポートします。
エクスポートデフォルト{
  名前: ""、
  データ() {
    var checkSize = (ルール, 値, コールバック) => {
      console.log(値);
      (値 < 500 || 値 > 1000)の場合 {
        callback(new Error("500 から 1000 の間の数値が推奨されます"));
      } そうでない場合 (!Number.isInteger(Number(value))) {
        callback(new Error("数値を入力してください"));
      } それ以外 {
        折り返し電話();
      }
    };
    戻る {


      ルールフォーム: {
        入力W: 500,
        入力H: 500
      },

      ルール:
        inputW: [{ バリデータ: checkSize, トリガー: "blur" }],
        inputH: [{ バリデータ: checkSize, トリガー: "blur" }]
      }
    };
  },
  メソッド: {
  },
  コンポーネント:
    変数ボックス
  }
};
</スクリプト>
<style lang="stylus" スコープ>
。全て
  パディング: 0 20px
  ディスプレイ: フレックス
  フレックス方向: 列
</スタイル>

次に、ドラッグアンドドロップを使用してコンポーネントのドラッグを実装し、Variableboxページにコンポーネントを表示します。 v-htmlの使用が失敗した後、Baiduで検索したところ、基本的にはvue.Vue.compile( template )を使用してレンダリングすることを呼び出していることがわかりましたが、例はありませんでした。

compileはテンプレート文字列をrender関数にコンパイルします。つまりrenderは最終的にcreateElementを呼び出してHTMLに変換しますが、直接レンダリングします。
</el-radio slot="コンポーネント" v-model="ラジオ" label="1"/>
だから私は個人的にはそれがうまくいかないと感じており、最終的には新しいコンポーネントを作成してマウントすることしかできない

   新しいVue({
        // el: '#app'
        テンプレート: this.ele,
         データ:{
           ラジオ: '2'
        },
      }).$mount("#apps");

これにより、問題は一時的に解決されます。

v-html を使用して vue でタグをレンダリングする

表示のためにページにレンダリングする必要があるラベル コンテンツを含む背景データを取得します。最終的な効果は次のようになります: グラフィックとテキストのレイアウト

1. まずデータを取得し、個別に処理する

2. HTMLで出力します

以下もご興味があるかもしれません:
  • v-html 命令を通じて vue によってレンダリングされたリッチ テキストのスタイルを変更できない問題の解決策
  • Vue.js レンダリングで HTML タグが解析されない問題を解決するには、v-html を使用します。

<<:  正の整数かどうかを判断するMYSQLカスタム関数の例コード

>>:  Win7 で IIS7 Web および FTP サービスを完全にアンインストールする方法

推薦する

プロキシはVue3データの双方向バインディングの原理を実現します

目次1. proxy と Object.defineProperty の利点2. プロキシ監視オブジ...

Kubernetes YAMLファイルの使用

目次01 YAMLファイルの概要YAML---キー値型YAML---リスト型02 K8Sにおけるマス...

Linux で同じ内容のファイルを識別する方法の詳細な説明

序文ファイルのコピーによってハードドライブのスペースが大量に浪費され、ファイルを更新するときに混乱が...

レスポンシブWebデザイン学習(3) - モバイルデバイスでのWebページのパフォーマンスを向上させる方法

序文モバイル デバイスでは、帯域幅とプロセッサ速度の制限により、Web ページのパフォーマンスに対す...

Tomcat セキュリティ仕様 (Tomcat セキュリティ強化と仕様)

tomcat はオープンソースの Web サーバーです。Tomcat ベースの Web は実行効率...

トップ 10 Js 画像処理ライブラリ

目次導入1. 異食症2. レナ3. コンプレッサー4. ファブリック5. ぼかす6. 画像を結合する...

HTML での一般的なリダイレクト接続の例コード

コードをコピーコードは次のとおりです。 window.location.href="zcb...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

マウスをホバーすると画像が折りたたまれる効果を実現する CSS

マウスをホバーすると画像が折りたたまれる効果を実現する CSS 1. 実施のポイント折り畳みは複数の...

カスタムポップアップボックスを実装するためのJavaScriptシングルトンモード

この記事では、カスタムポップアップボックスを実装するためのJavaScriptシングルトンモードの具...

HTTP および HTTP コラボレーション Web サーバー アクセス フロー図

Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...

JavaScript のシングルトン デザイン パターン

目次1. デザインパターンとは何ですか? 2. デザインパターンの5つの設計原則(SOLID) 3....

MySql テーブル、データベース、シャーディング、パーティショニングの知識の詳細な説明

1. はじめにデータベース内のデータ量が一定レベルに達すると、システムパフォーマンスのボトルネックを...

mysql ステートメントを使用してユーザー権限を照会するプロセスの詳細な説明

MySQL では、ユーザーに付与された権限をどのように確認しますか? ユーザーに付与される権限は、グ...

数十行のjsを使用してクールなキャンバスインタラクティブ効果を実現する方法を教えます

目次1. 円を描く2. マウスで動かした円3. マウスでドラッグした粒子4. カラーグラデーション粒...