v-html渲染組件問題
由於前面對html進行過解析,今天想用vue拖拽,實現一手類似快站那種自動生成代碼,結果就遇到瞭拖拽組件過去怎麼無法解析的問題,因為vue的v-html為瞭防止xss攻擊隻能解析html
思路
先實現簡單頁面 分三塊左中右,左邊是需要拖動的組件,中間是用於組件排列顯示,右邊是解析出的代碼
左邊組件列表代碼
<div ref="test" > <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> </one-component> </div> </template> <script> import OneComponent from '../components/oneComponent' export default { name: '', data() { return { radio: '2', title: ['Radio 單選框'] } }, components:{ OneComponent }, } </script> <style lang="stylus" scoped> </style>
中間組件顯示代碼
<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> <Variablebox class="box" :width="ruleForm.inputW" :height="ruleForm.inputH" ></Variablebox> </div> </template> <script> import Variablebox from "../components/Variablebox"; export default { name: "", data() { var checkSize = (rule, value, callback) => { console.log(value); if (value < 500 || value > 1000) { callback(new Error("建議500 ~ 1000內的數字")); } else if (!Number.isInteger(Number(value))) { callback(new Error("請輸入數字值")); } else { callback(); } }; return { ruleForm: { inputW: 500, inputH: 500 }, rules: { inputW: [{ validator: checkSize, trigger: "blur" }], inputH: [{ validator: checkSize, trigger: "blur" }] } }; }, methods: { }, components: { Variablebox } }; </script> <style lang="stylus" scoped> .all padding: 0 20px display: flex flex-direction: column </style>
接下來實現組件的拖拽使用drag和drop 將組件顯示在Variablebox頁面上,使用v-html無效後,百度瞭一下,發現基本上叫使用vue.Vue.compile( template ) 和render但是沒給例子
compile是將一個模板字符串編譯成 render 函數,就是最後
都是render調用createElement,轉化成html,但是我們我們是直接渲染
</el-radio slot=”component” v-model=”radio” label=”1″/>
所以個人
感覺行不通,最後隻能嘗試新建組件然後掛載上去
new Vue({ // el: ‘#app' template: this.ele, data:{ radio: '2' }, }).$mount("#apps");
這樣算是暫時決解掉這個問題吧
vue中運用v-html渲染標簽
獲取後臺數據帶 標簽 內容,需要渲染到頁面展示。最終效果如下:圖文排版
1.首先拿到數據,單獨處理
2.接著在html中輸出即可
推薦閱讀:
- vue表單驗證rules及validator驗證器的使用方法實例
- el-form resetFields無效和validate無效的可能原因及解決方法
- 解決Element-ui radio單選框label佈爾/數值的一個坑
- 前端vue2 element ui高效配置化省時又省力
- Vue動態組件與內置組件淺析講解