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

推薦する

PXEを使用してLinuxシステムを自動的に展開する方法

目次背景DHCPの設定DHCP ファイル (動的ホスト構成プロトコル) の編集tftp 設定sysl...

VUE+Canvasはデスクトップピンボールブロック破壊ゲームのサンプルコードを実装します

誰もがピンボールやレンガ崩しのゲームをプレイしたことがあるでしょう。左と右のキーを使用して、下にある...

Angular のパフォーマンス最適化: サードパーティ コンポーネントと遅延読み込みテクノロジー

目次概要環境の準備プロジェクトのパフォーマンスに影響を与える要因遅延読み込みとは何ですか?プロジェク...

MySQLインデックスが失敗するいくつかの状況の分析

1. 最左プレフィックス原則 - 複数の列にインデックスが付けられている場合は、最左プレフィックス原...

MySQL 学習ノート: データ エンジン

現在のデータベースでサポートされているエンジンを表示します エンジンを表示 +-----------...

JavaScript で 2 次元配列を作成するためのヒント

Js での 2 次元配列の作成:まず、JavaScript は 1 次元配列のみをサポートしています...

Vueはボトムクエリ関数を実装します

この記事では、ボトムクエリ機能を実装するためのVueの具体的なコードを例として紹介します。具体的な内...

LinuxシステムでFuserコマンドを使用する方法

Fuser コマンドとは何ですか? fuser コマンドは、特定のファイル、ディレクトリ、またはソケ...

キーフリーログインプロセスを実現するためのLinux構成の分析

1.sshコマンドLinux では、ssh コマンドを使用して別のサーバーにログインできます。 2 ...

海外でダウンロードできる25個の新鮮で便利なアイコンセット

1. Eコマースアイコン2. アイコンスイーツ2 3. 携帯電話アイコンパック4. 旗アイコンセット...

Idea の起動速度を改善し、Tomcat ログの文字化けを解決する方法

目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...

MySQL がデュアルマスターで構成されている場合にデータループの競合を回避する方法

あなたはこの質問について考えたことがあるでしょうか?デュアルアクティブが構成されている場合、データル...

CSS 等高レイアウトの一般的な方法

等高レイアウト同じ親コンテナー内の同じ高さの子要素のレイアウトを指します。等高レイアウトの実装の観点...

Vueコンポーネントの基本のまとめ

コンポーネントの基本1 コンポーネントの再利用コンポーネントは再利用可能な Vue インスタンスです...

docker compose デプロイメントにおけるマスタースレーブレプリケーションの実装

目次構成解析サービス構築ディレクトリ構造ファイルを作成インスタンス構成サービスを開始するテストRed...