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

推薦する

vue-cropper コンポーネントは画像の切り取りとアップロードを実現します

この記事では、画像の切り取りとアップロードを実装するためのvue-cropperコンポーネントの具体...

ウェブフロントエンドウェブ開発の一般的なプロセスの簡単な紹介

フロントエンド開発を行っている初心者の学生を多く見かけますが、彼らの効率は比較的遅いです。常にコード...

Vueフィルターの使い方

目次概要フィルターの定義フィルターの使用カスタムグローバルフィルターローカルフィルター予防例1(ロー...

Mysql ファジークエリが大文字と小文字を区別するかどうかの詳細な調査

序文最近、私は小さな個人ブログ プロジェクトを書くのに忙しくしています。 「グローバル検索」機能を実...

Docker に nginx をインストールし、https 経由でアクセスを構成する方法

1. 最新のnginx dockerイメージをダウンロードする $ docker pull ngin...

Reactフックの仕組み

目次1. React フックと純粋関数2. シンプルなmyUseState 3. myUseStat...

MySQL の指定文字によるマージと分割の例のチュートリアル

序文指定した文字による結合または分割は一般的なシナリオです。MySQL では結合の記述は比較的簡単で...

MySQLサービスを開くおよび閉じる2つの方法

方法1: cmdコマンドを使用するまず、DOS ウィンドウを開き、スタート、実行、cmd と入力しま...

CentOS7 (YUM) での MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビット、MySQL5.7 1. YUMソースを設定するMyS...

vsftpd ユーザーが ssh 経由でログインすることを禁止する方法

序文vsftp は使いやすく安全な FTP サーバー ソフトウェアです。システムユーザーまたは仮想ユ...

Windows Server 2012 でファイル サーバーを構築するための詳細な手順

ファイル サーバーは、企業内で最も一般的に使用されるサーバーの一つであり、主にファイル共有を提供する...

WeChatミニプログラムページで値を返す4つの解決策のまとめ

目次使用シナリオ解決1. globalDataを使用して実装する2. ローカルキャッシュストレージを...

MySQLチュートリアルではストアドプロシージャを徹底的に理解します

目次1. ストアドプロシージャに関連する概念2. ストアドプロシージャの使用1) ストアドプロシージ...

React Hooksの使用例

目次簡単なコンポーネントの例より複雑な親子コンポーネントのケースオンセレクトの書き方反応する子供Re...

Reactにおけるコンテキスト適用シナリオの分析

コンテキストの定義と目的コンテキストは、コンポーネント ツリーにプロパティを明示的に渡すことなく、コ...