使用 FormMaking 為表單添加事件處理

背景描述

表單在日常使用中,面對很多特殊的業(yè)務(wù)場景,需要為表單中某些控件單獨設(shè)置一些事件來做自定義操作。為此,我們?yōu)?FormMaking表單設(shè)計器 添加了新的功能,可以快速的對表單中的元素綁定各種事件,使得表單能夠有更好的擴展性。

查看 官方文檔,可以了解到新版本添加了獲取表單項組件的方法 getComponent,接下來我們用簡單的例子來說明下如何為表單動態(tài)添加事件。

表單輸入框加入點擊事件

我們在表單開發(fā)的時候,常會有這樣一種需求,就是點擊文本框后會彈出一個模態(tài)框進行一些操作后將結(jié)果返回到文本框中;這里就需要給文本框添加點擊事件來處理后面的操作。

下面我們實現(xiàn)一個簡單的例子,點擊文本框后,彈出提示框,點擊確定后為文本框賦值。

  1. 在設(shè)計器中添加一個文本框并修改字段標(biāo)識為 name。
  1. 點擊生成代碼,復(fù)制到我們的代碼編輯器中并綁定點擊事件。
<template>
  <div>
    <fm-generate-form 
      :data="jsonData" 
      :remote="remoteFuncs" 
      :value="editData" 
      :remote-option="dynamicData"
      ref="generateForm"
    >
    </fm-generate-form>
    <el-button type="primary" @click="handleSubmit">Submit</el-button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      jsonData: {"list":[{"type":"input","icon":"icon-input","options":{"width":"100%","defaultValue":"","required":false,"requiredMessage":"","dataType":"","dataTypeCheck":false,"dataTypeMessage":"","pattern":"","patternCheck":false,"patternMessage":"","placeholder":"","customClass":"","disabled":false,"labelWidth":100,"isLabelWidth":false,"hidden":false,"dataBind":true,"showPassword":false,"remoteFunc":"func_1608119316839","remoteOption":"option_1608119316839"},"name":"單行文本","key":"1608119316839","model":"name","rules":[]}],"config":{"labelWidth":100,"labelPosition":"right","size":"small","customClass":"","ui":"element","layout":"horizontal","labelCol":3,"width":"100%","hideLabel":false,"hideErrorMessage":false}},
      editData: {},
      remoteFuncs: {
        
      },
      dynamicData: {
        
      }
    }
  },
  mounted () {
    this.$refs.generateForm.getComponent('fm-name').$el.onclick = () => {
      this.$alert('您點擊了我', '提示').then(() => {
        this.$refs.generateForm.setData({
          name: '123'
        })
      })
    }
  },
  methods: {
    handleSubmit () {
      this.$refs.generateForm.getData().then(data => {
        // Data verification succeeded
        alert(JSON.stringify(data))
      }).catch(e => {
        // Data verification failed
      })
    }
  }
}
</script>

在表單渲染完成 mounted 方法中,為表單綁定事件,getComponent('fm-name') 方法可以找到表單設(shè)計器中為每個表單項綁定的字段標(biāo)識的組件,以 fm-字段標(biāo)識 的形式,返回值為 VueComponent 對象,我們可以通過其 $el 獲取到原生DOM,就可以為其綁定原生的事件。

效果如下:


表單快速定位到輸入框

有時候我們需要打開表單的時候,默認(rèn)光標(biāo)就在輸入框中,這個時候我們也可以通過 getComponent 方法找到組件并且調(diào)用 focus 方法來實現(xiàn)。

同樣是使用上面設(shè)計的表單,來看下代碼:

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

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

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