1.el-autocomplete组件
注意:如果输入框进行了输入限制,但queryString的值还是限制前的值,所以进行联想查询时,用联想组件双向绑定的字段,才会所见即所得,否则联想结果将有可能不正确。
querySearch(queryString, cb) {
// 在输入框有输入限制时,用v-model绑定的字段,而非queryString
if(this.formData.name) {
// 请求接口获取数据
}
}
2.el-tabs组件
注意1:即使没进行for循环,如果tab是根据场景动态渲染的,也需要加上key属性,防止报错和产生渲染问题,写法如下:
<el-tabs v-model="activeName">
<el-tab-pane key="1"></el-tab-pane>
<el-tab-pane key="2"></el-tab-pane>
<el-tab-pane v-if="flag === 3" key="3"></el-tab-pane>
</el-tabs>
如果不加上key,则会产生如下报错或渲染问题。
Vue warn: Duplicate keys detected:“tab-XXX“. This may cause an update error.
注意2: el-tabs显示时有时会出现蓝框,解决如下:
/deep/.el-tabs__item:focus.is-active.is-focus {
box-shadow: none;
}
3.el-table组件
注意:当table有复选框时,row-key属性必须绑定列表数据的唯一key,否则,在翻页时,会把上一页的选中状态带到下一页,如下:
4.el-pagination组件
注意:当用户输入搜索条件或改变搜索条件但未触发搜索,转而直接切换页码到m时,带入搜索条件及当前点击的页码m请求接口,若当前页码m超过接口数据返回的最大页数n,则el-pagination组件自动改变页码,跳到n。
但此时因接口传参的是页码m,该页码下无数据的,就会造成如下图问题:172页实际是有数据的,但是页面显示的是无数据。
针对此问题,有两种处理方式:
1)仍然带入搜索条件及当前点击的页码m请求接口,但加入如下逻辑:
即先判断当前点击的页码m是否大于接口返回数据的页码n,若大于,则将页码传参改为接口返回数据的页码n,然后递归调用loadData函数。
loadData() {
// ...
// 关键代码
const m = that.ipagination.current
const n = res.data.pages
if(m > n) {
this.ipagination.current = res.data.pages
this.loadData()
} else {
this.dataSource = res.data.records
this.ipagination.total = res.data.total
this.loading = false
}
}
弊端:当m>n时,需要多请求一次接口。
2)因用户未触发搜索,所以不带搜索条件,只带当前点击的页码m请求接口。
弊端:用户可能不记得自己未触发搜索,所以可能会觉得接口返回的数据没有带入搜索条件从而觉得系统有bug。
如果有更好的处理方式,欢迎大家评论区补充。