切換Radio單選框時,對應的Input已經(jīng)置為了不可編輯,但表單驗證的信息仍然存在。
兩個Radio各對應三個Input,所有Input都加了Form表單,當在切換Radio時,將對應的Input設為可編輯,另外三個置為不可編輯。而這時候會發(fā)現(xiàn)另外三個已經(jīng)置為不可編輯的框的表單驗證仍然生效了。解決辦法:
在Radio的on-change回調中加一句:this.$refs['formValidate'].validate()。
這里iview官網(wǎng)也提供了清除表單的方法:this.$refs.xxx.resetFields()。 但是在我們上面那種場景下這樣直接清除會帶來一個問題。
比如說我有多個Input,這些Input是單獨的,沒有Radio或其他東西作為父元素 。而這些單獨的Input又和嵌套了Radio的Input一起加了Form表單驗證。這時候如果在切換Radio時調用this.$refs.xxx.resetFields()方法,會發(fā)現(xiàn)所有的Input表單提示都被清除了。如果這些單獨的Input中的內容是不應該通過的,那這個bug是不能忍的。
官網(wǎng)提供的resetFields是對整個表單驗證進行清除,而第一種辦法是局部的。局部清除表單還有種辦法,但是需要拿到參數(shù)值,然后在看iview底層來拿到你所需要清除的表單元素來做。因為需要參數(shù)值所以只能在傳了formValidate的方法里面這樣做。具體用那種看個人的情況。
在render創(chuàng)建的組件或標簽中添加ref
有些情況下需要拿到一些元素,如果這些元素是在html代碼中,可以直接通過ref="test"添加,但是如果某些元素是通過render動態(tài)創(chuàng)建的,那直接在render的函數(shù)中寫ref是沒用:

這種方式添加的ref不會報錯,但在調用this.$refs.test的時候會為undefined,因為ref是作為渲染結果被創(chuàng)建的,所以在初始渲染時它們根本不存在,所以為undefined,即便把ref="test"寫在props中結果也一樣。如果要在這里動態(tài)添加ref,就不能使用h函數(shù),而是使用$createElement:
render: (h, params) => {
? ? ? ? ? ? let create = this.$createElement
? ? ? ? ? ? let dom = create('InputNumber', {
? ? ? ? ? ? ? ref: 'skuRef' + params.index,
? ? ? ? ? ? ? on: {
? ? ? ? ? ? ? ? 'on-change': (value) => {
? ? ? ? ? ? ? ? ? ? console.log('change')
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? })
? ? ? ? ? ? return dom
????????}
這是我在針對創(chuàng)建多個InputNumber時的做法,因此后面加了params.index,用來區(qū)分不同的InputNumber,具體場景根據(jù)實際業(yè)務需求來。