近期vue开发相关问题

2020-08-25 15:22:05 浏览数 (1)

问题一: 子组件传值给父组件,当使用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单独封装成组件,再引入表格即可

0 人点赞