導航列表:
一、iview單選框Select驗證問題
回到頂部先看下基本案例:
//template中 <Select v-model="formValidate.city" placeholder="Select your city"> <Option v-for="item in selectList" :value="item.value">{{item.label}}</Option> </Select> //遍歷的數組信息 selectList:[ { value:0, label:'北京' }, { value:1, label:'上海' }, { value:2, label:'廣州' } ] //表單驗證 { required: true, message: 'Please select the city', trigger: 'change' }
完整案例地址:https://run.iviewui.com/ySGFAEoH
上面的案例不管如何選擇,它都會報錯,為什么會一直報錯呢?代碼看起來也沒有問題!!!
在iview中默認校驗value數據類型為String,上面的出現的問題就是因為value的類型為Number,所以才會一之出錯;
解決辦法有兩種:
1、把value的類型改成String 點擊跳轉到此案例demo
1 selectList:[ 2 { 3 value:'0', 4 label:'北京' 5 }, 6 { 7 value:'1', 8 label:'上海' 9 }, 10 { 11 value:'2', 12 label:'廣州' 13 } 14 ],
2、修改表單驗證的類型 點擊跳轉到此案例demo
1 //添加 type:'number' 2 { type:'number',required: true, message: 'Please select the city', trigger: 'change' }
3、自定義驗證
1 { 2 required: true, 3 message: 'Please select the city', 4 trigger: 'change', 5 validator(value, rule, cb){ 6 console.log(value); 7 if(typeof value === 'number'){ 8 cb(); 9 }else{ 10 cb('不能為空') 11 } 12 } 13 }
二、iview表單v-if引起的問題
回到頂部選中不同的值提交試試:明明表單驗證生效了DOM也改變了,卻沒有去掉*號,代碼中明明用了v-if 進行從新創建新的DOM卻還是有問題;
代碼邏輯看起來明明也沒有什么問題,看一下這個問題的案例 此案例demo點擊跳轉
<template>
<Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80">
<FormItem label="城市" prop="city">
<RadioGroup v-model="formValidate.city">
<Radio label="1">北京</Radio>
<Radio label="2">上海</Radio>
</RadioGroup>
</FormItem>
<FormItem label="描述1" prop="desc" v-if="formValidate.city==='1'">
<Input v-model="formValidate.desc" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="Enter something..."></Input>
</FormItem>
<FormItem label="描述2" v-else>
<Input v-model="formValidate.desc" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="Enter something..."></Input>
</FormItem>
<FormItem>
<Button type="primary" @click="handleSubmit('formValidate')">Submit</Button>
<Button @click="handleReset('formValidate')" style="margin-left: 8px">Reset</Button>
</FormItem>
<div>
選中不同的城市提交試試:明明表單驗證生效了DOM也改變了,卻沒有去掉*號
</div>
</Form>
</template>
<script>
export default {
data () {
return {
formValidate: {
city: '1',
desc: ''
},
ruleValidate: {
city: [
{ required: true, message: 'Please select gender', trigger: 'change' }
],
desc: [
{ required: true, message: 'Please enter a personal introduction', trigger: 'blur' },
{ type: 'string', min: 20, message: 'Introduce no less than 20 words', trigger: 'blur' }
]
}
}
},
methods: {
handleSubmit (name) {
this.$refs[name].validate((valid) => {
if (valid) {
this.$Message.success('Success!');
} else {
this.$Message.error('Fail!');
}
})
},
handleReset (name) {
this.$refs[name].resetFields();
}
}
}
</script>
這個問題引起的原因是因為:虛擬DOM渲染有關,具體詳細的底層原理自己可以去看下,我只說解決辦法:
給v-if的標簽添加key值記得不要寫一樣的,從而讓瀏覽器創建新的DOM,而不是值更換內容,這個原理跟v-for的很像 解決后的案例demo,點擊跳轉
<FormItem label="描述1" :key="'test1'" prop="desc" v-if="formValidate.city==='1'"> <Input v-model="formValidate.desc" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="Enter something..."></Input> </FormItem> <FormItem label="描述2" :key="'test2'" v-else> <Input v-model="formValidate.desc" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="Enter something..."></Input> </FormItem>
三、Upload 手動上傳組件 使用是出現的問題:
回到頂部1 <template> 2 <div> 3 <Upload 4 :before-upload="handleUpload" 5 :on-error="handleError" 6 :on-success="handleSuccess" 7 action="//jsonplaceholder.typicode.com/posts/"> 8 <Button icon="ios-cloud-upload-outline">上傳文件</Button> 9 </Upload> 10 </div> 11 </template> 12 <script> 13 export default { 14 methods: { 15 async handleUpload (file) {
//已經返回false 16 return false; 17 }, 18 handleSuccess(res, file, fileList){ 19 console.log(res,'success') 20 }, 21 handleError(err){ 22 console.log(err,'錯誤') 23 }, 24 } 25 } 26 </script>
函數使用 async 被調用時,再未被處理時結果會直接返回 promise

四、Tabs嵌套使用時的問題:
回到頂部問題:當Tabs被嵌套使用時會導致內部的tabs選項渲染到最外層上面,導致無法正常使用。
該問題案例:點擊跳轉
那么該如何解決呢?
給Tabs加一個name屬性和TabPane加一個tab屬性,兩者值要一樣;
<Tabs value="name1" name="test1">
<TabPane label="標簽一" name="name1" tab="test1">標簽一的內容</TabPane>
<TabPane label="標簽二" name="name2" tab="test1">標簽二的內容</TabPane>
<TabPane label="標簽三" name="name3" tab="test1">標簽三的內容</TabPane>
</Tabs>
解決后的案例:點擊跳轉
Tooltip 換行問題
回到頂部
//代碼中我已按照iview官網說明加入了white-space: normal;進行換行,但網址卻沒有進行換行;
<template>
<Tooltip>
A balloon appears when the mouse passes over this text
<div slot="content" style="white-space: normal;">
<p>
Here is the prompt text A balloon appears when the mouse passes over this text;
</p>
<p>
https://run.iviewui.com///run.iviewui.com///run.iviewui.com///run.iviewui.com///run.iviewui.com///run.iviewui.com///run.iviewui.com/
</p>
</div>
</Tooltip>
</template>
<script>
export default {
}
</script>
此案例入口: 點擊跳轉
因為網址不會自動換行需要加入word-break: break-all;
解決后的案例入口:點擊跳轉
六、Select框遠程搜索問題
回到頂部
問題描述: 在使用iview遠程搜索時,如果你的的列表項 label 中出現 ""號會導致 change 事件觸發兩次,而且第二次沒有值;失焦時也會被清空;
問題案例跳轉: 點擊跳轉
解決方案: 暫時沒有找到源碼哪里出得問題,也沒有什么好辦法規避掉這種問題,目前使用的是正則 用兩個單引號 替換掉了 雙引號 ;暫未有什么好的想法,如果有好的想法歡迎評論分析;
解決后的案例入口: 點擊跳轉
