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 サービスを完全にアンインストールする方法

ブログ    

推薦する

SQL ROW_NUMBER() および OVER() メソッドのケーススタディ

構文フォーマット: row_number() over(partition by grouping ...

Alibaba Cloudのセキュリティルール設定の詳細な説明

2日前、ダブル11ショッピングフェスティバルを利用して、Alibaba CloudでECS(サーバー...

Vue 3 カスタムディレクティブ開発の概要

指令とは何ですか? Angular と Vue はどちらもディレクティブの概念を持っており、これは通...

ウェブページの読み込み速度を上げる25の方法とヒント

はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...

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

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

Vueはコンピュータカメラを呼び出して写真機能を実現します

この記事の例では、コンピュータカメラを呼び出して写真機能を実現するためのvueの具体的なコードを参考...

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...

CentOS 8.4 での Docker パッケージのオフラインインストールの問題について

使用する仮想マシンは、サーバー環境をシミュレートする CentOS 8.4 です。外部ネットワークに...

CSS を使用して複数の方法で等高レイアウトを実装するサンプル コード

この記事で説明する等高レイアウトでは、純粋な CSS を使用して、要素の高さを手動で設定することなく...

ウェブサイトのカラースキーム ウェブサイトに適した色の選択

色はウェブサイト訪問者に影響を与えますか?数年前までは、ウェブサイトはまだ贅沢品でしたが、今ではほと...

MySQL で指定した桁数の乱数を生成する方法と、バッチで乱数を生成する方法

1. まず、よく使われるMySQL関数をいくつか紹介しますRAND() は 0 から 1 (0<...

Linux で fdisk を使用してディスクをパーティション分割する方法

Linux パーティションでよく使用されるコマンド: fdisk、MBR パーティション テーブルの...

ElementuiはデータをxlsxとExcelテーブルにエクスポートします

最近、Vue プロジェクトについて知り、ElementUI でデータを xlsx および Excel...

JavaScript スタイル オブジェクトと CurrentStyle オブジェクトのケース スタディ

1. スタイルオブジェクトスタイル オブジェクトは単一のスタイル宣言を表し、スタイルが適用されている...