form-generator 添加自定義的.vue 組件(二)

讓預(yù)覽界面也能顯示自定義的組件

前面已經(jīng)實(shí)現(xiàn)了自定義.vue組件的添加,再編輯界面上也能正常使用。單當(dāng)進(jìn)行預(yù)覽的時(shí)候卻發(fā)現(xiàn)無法顯示,這是因?yàn)轭A(yù)覽的preview 頁(yè)面是通過iframe 嵌套的另一個(gè)頁(yè)面,與本編輯器不在同一個(gè)vue 應(yīng)用中,所以這里需要重新注冊(cè)組件。
生成preview 頁(yè)面的代碼主要在generator目錄 下。


ml.png
讓自定義組件可在preview 上運(yùn)行需要一下3步:

1.在preview 的main.js 中全局注冊(cè)自定義組件

// preview/main.js
import Vue from 'vue'
import { loadScriptQueue } from '@/utils/loadScript'
import Tinymce from '@/components/tinymce/index.vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import htitle from '../../components/render/aritical/htitle.vue'   //引入自己的自定義組件
import mediaImg from '../../components/render/aritical/media_img.vue'

Vue.component('tinymce', Tinymce)
Vue.use(ElementUI)
Vue.component('htitle', htitle) //注冊(cè)自己的自定義組件
Vue.component('mediaImg', mediaImg)

2.在generator/html.js 下的tag 對(duì)象添加自定義組件的html代碼

tinymce: el => {
    const { tag, vModel, placeholder } = attrBuilder(el)
    const height = el.height ? `:height="${el.height}"` : ''
    const branding = el.branding ? `:branding="${el.branding}"` : ''
    return `<${tag} ${vModel} ${placeholder} ${height} ${branding}></${tag}>`
  },
  htitle: el => {
      const { tag } = el.__config__
      const conf = `:conf="formData.conf${el.__config__.formId}"`
      return `<${tag} ${conf}></${tag}>`
  },
  mediaImg: el => {
      const { tag } = el.__config__
      const conf = `:conf="formData.conf${el.__config__.formId}"`
      return `<${tag} ${conf}></${tag}>`
  }

3.在generator/js.js 中添加組件所需的額外數(shù)據(jù)。我這里是為了偷懶把組件的所有的參數(shù)都放到了conf 中,原代碼中是沒有的,需要手動(dòng)添加。

// 構(gòu)建data
function buildData(scheme, dataList) {
  // 在預(yù)覽頁(yè)面中需要把每個(gè)組件的conf 加入到data 中,方便每個(gè)自定義的組件獲取自己的配置
  dataList.push(`conf${scheme.__config__.formId}: ${JSON.stringify(scheme)},`)
}

這里由于我的目的是吧form-generator 改造成文章編輯器,表單的所有東西幾乎都用不上,所以有很多的邏輯代碼都被我刪減了。目前還有很多遺留,只能等到吧所有的功能都完成的差不多時(shí)候再去統(tǒng)一處理。

再附上成功后的效果圖:


48.png

5.png

66.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • > Antlr4 是一個(gè)強(qiáng)大的解析器的生成器,可以用來讀取、處理、執(zhí)行或翻譯結(jié)構(gòu)化文本,ANTLR可以從語(yǔ)法上來生...
    kikiki4閱讀 82評(píng)論 0 1
  • > Antlr4 是一個(gè)強(qiáng)大的解析器的生成器,可以用來讀取、處理、執(zhí)行或翻譯結(jié)構(gòu)化文本,ANTLR可以從語(yǔ)法上來生...
    kikiki4閱讀 75評(píng)論 0 1
  • > Antlr4 是一個(gè)強(qiáng)大的解析器的生成器,可以用來讀取、處理、執(zhí)行或翻譯結(jié)構(gòu)化文本,ANTLR可以從語(yǔ)法上來生...
    kikiki4閱讀 111評(píng)論 0 2
  • > Antlr4 是一個(gè)強(qiáng)大的解析器的生成器,可以用來讀取、處理、執(zhí)行或翻譯結(jié)構(gòu)化文本,ANTLR可以從語(yǔ)法上來生...
    kikiki4閱讀 69評(píng)論 0 2
  • > Antlr4 是一個(gè)強(qiáng)大的解析器的生成器,可以用來讀取、處理、執(zhí)行或翻譯結(jié)構(gòu)化文本,ANTLR可以從語(yǔ)法上來生...
    kikiki4閱讀 218評(píng)論 0 4

友情鏈接更多精彩內(nèi)容