问题一: 子组件传值给父组件,当使用elementUI是,modal弹框中需要一个form表单,所以我把form表单单独抽出来当组件,这时就需要在表单提交成功或者取消表单的时候,触发父组件的modal弹框关闭.
解决: 通过子组件配置$emit,第一个参数时事件名,用于父组件回调,第二个参数是要传给父组件的回调值,然后父组件配置对应的事件即可,例如 1.子组件
代码语言:javascript复制......
<div class="handle-button">
<el-form-item>
<el-button type="primary" @click="uploadSubmit('ruleForm')">保存</el-button>
<el-button @click="closeTheModal">取消</el-button>
</el-form-item>
</div>
......
closeTheModal () {
this.$emit('close', false)
}
......
2.父组件
代码语言:javascript复制......
<upload-form @close="handleUploadFormModal"></upload-form>
......
handleUploadFormModal: function (data) {
this.uploadShow = data
}
......
参考资料: https://cn.vuejs.org/v2/api/#vm-emit
image.png
问题二: 触发表格中的switch组件,需要表格当前行的值以及switch的改变值,如果直接带值会覆盖掉默认的改变值
解决: 通过带一个$event参数,就时默认的改变值
代码语言:javascript复制<el-switch
v-model="scope.row.status"
active-value='1' inactive-value='0'
@change="changeUserStatus($event, scope.row)">
</el-switch>
参考资料: https://cn.vuejs.org/v2/guide/events.html#内联处理器中的方法
问题三:过滤器的使用,请求的数据放入表格,有些数据后台只是传来对应的id,需要使用过滤器来将其转换成需要的值
解决: 例如下面写的过滤在线状态的过滤器,
代码语言:javascript复制const myFilter = {
toOnline: function (online) {
switch (online) {
case 'Y':
return '在线';
case 'N':
return '不在线';
default:
return 'NaN';
}
}
}
export default myFilter
也可以使用对象的写法,如下
代码语言:javascript复制const myFilter = {
toOnline: function (online) {
let onlineObj = {
Y: '在线',
N: '不在线'
}
return onlineObj[online]
}
}
export default myFilter
写完过滤器,需要在main.js中引入
代码语言:javascript复制import myFilter from './config/myFilter'
for (let key in myFilter) {
Vue.filter(key, myFilter[key])
}
参考资料: https://cn.vuejs.org/v2/guide/filters.html#ad
问题四: element分页请求相关,分页请求,防抖请求
解决: 分页请求可以直接拼接,如下
代码语言:javascript复制methods: {
getData: function() {
this.$request({
url: `/api?page=${this.page}&size=${this.size}`
})
}
}
这样写,如果带参多了会很麻烦,所以可以写一个计算属性
代码语言:javascript复制data: {
query: {
page: 1,
size:10
}
},
computed: {
queryString: function() {
Object.key(query).filter(key => query[key] !== '')
.map(key => `${key}=${query[key]}`)
.join('&')
}
}
防抖可以使用lodash的_.debounce方法
代码语言:javascript复制_.debounce( this.getData(), 800)
参考资料: https://lodash.com/docs/4.17.10#debounce https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join
问题五: elementui中popover组件无法再表格中直接使用
解决: 直接把popover单独封装成组件,再引入表格即可