Vue element-ui 组件使用过程中产生的问题汇总(持续更新)

这里做下平时用到组件时 产生的问题记录

①.关于ElementUI导航组件el-menu刷新页面后恢复默认问题

②.element table表格行列拖拽

③.vue router带参数页面刷新或回退参数消失的解决方法

④.vue如何根据返回的值对元素进行样式渲染

⑤.vue封装公共方法,并调用

⑥.vue数据表格自定义序号排序(每页连续排序)

⑦.element-ui 的table中让某个单元格变色

⑧.vue+element-ui 表格中的时间格式化

⑨.Element表格单元格的几种点击事件


①.关于ElementUI导航组件el-menu刷新页面后恢复默认问题

<el-menu 
    :default-active="activeIndex"
    router //是否使用 vue-router 的模式,启用该模式会在激活导航时以 index 作为 path 进行路由跳转
>
	// index值设置为路由path
	<el-menu-item index="/">首页</el-menu-item>
	<el-menu-item index="/mine">我的</el-menu-item>
</el-menu>
...
data () {
    
    
    return {
    
    
        activeIndex: this.$route.path
    }
},

②.element table表格行列拖拽

element ui 表格没有自带的拖拽排序的功能,只能借助第三方插件Sortablejs来实现

在这里插入图片描述
首先需要安装Sortable.js

npm install sortablejs --save

然后引用

import Sortable from ‘sortablejs’

需要注意的是element table务必指定row-key,row-key必须是唯一的,如ID,不然会出现排序不对的情况。

示例代码:

<template>
  <div style="width:800px">

    <el-table :data="tableData"
      border
      row-key="id"
      align="left">
     <el-table-column v-for="(item, index) in col"
        :key="`col_${index}`"
        :prop="dropCol[index].prop"
        :label="item.label"> 
      </el-table-column>
    </el-table>
    <pre style="text-align: left">
      {
    
    {
    
    dropCol}}
    </pre>
    <hr>
    <pre style="text-align: left">
      {
    
    {
    
    tableData}}
    </pre>
  </div>
</template>
<script>
import Sortable from 'sortablejs'
export default {
    
    
  data() {
    
    
    return {
    
    
      col: [
        {
    
    
          label: '日期',
          prop: 'date'
        },
        {
    
    
          label: '姓名',
          prop: 'name'
        },
        {
    
    
          label: '地址',
          prop: 'address'
        }
      ],
      dropCol: [
        {
    
    
          label: '日期',
          prop: 'date'
        },
        {
    
    
          label: '姓名',
          prop: 'name'
        },
        {
    
    
          label: '地址',
          prop: 'address'
        }
      ],
      tableData: [
        {
    
    
          id: '1',
          date: '2016-05-02',
          name: '王小虎1',
          address: '上海市普陀区金沙江路 100 弄'
        },
        {
    
    
          id: '2',
          date: '2016-05-04',
          name: '王小虎2',
          address: '上海市普陀区金沙江路 200 弄'
        },
        {
    
    
          id: '3',
          date: '2016-05-01',
          name: '王小虎3',
          address: '上海市普陀区金沙江路 300 弄'
        },
        {
    
    
          id: '4',
          date: '2016-05-03',
          name: '王小虎4',
          address: '上海市普陀区金沙江路 400 弄'
        }
      ]
    }
  },
  mounted() {
    
    
    this.rowDrop()
    this.columnDrop()
  },
  methods: {
    
    
    //行拖拽
    rowDrop() {
    
    
      const tbody = document.querySelector('.el-table__body-wrapper tbody')
      const _this = this
      Sortable.create(tbody, {
    
    
        onEnd({
     
      newIndex, oldIndex }) {
    
    
          const currRow = _this.tableData.splice(oldIndex, 1)[0]
          _this.tableData.splice(newIndex, 0, currRow)
        }
      })
    },
    //列拖拽
    columnDrop() {
    
    
      const wrapperTr = document.querySelector('.el-table__header-wrapper tr')
      this.sortable = Sortable.create(wrapperTr, {
    
    
        animation: 180,
        delay: 0,
        onEnd: evt => {
    
    
          const oldItem = this.dropCol[evt.oldIndex]
          this.dropCol.splice(evt.oldIndex, 1)
          this.dropCol.splice(evt.newIndex, 0, oldItem)
        }
      })
    }
  }
}
</script>
<style scoped>
</style>

③.vue router带参数页面刷新或回退参数消失的解决方法

先说下:Vue router 如何传参

params、query是什么?

params:/router1/:id ,
/router1/123,/router1/789 ,这里的id叫做params

query /router1?id=123 ,/router1?id=456 ,这里的id叫做query。

路由界面:

router.js:

在这里插入图片描述
注意:如果路由上面不写参数,也是可以传过去的,但不会在url上面显示出你的参数,并且当你跳到别的页面或者刷新页面的时候参数会丢失(如下图所示),那依赖这个参数的http请求或者其他操作就会失败。
在这里插入图片描述
注意看上面的路由参数,id这个参数是我们有设置在路由上面的,id2我没有设置在路由里面,所以刷新之后id2就不见了,在项目中,我们总不可能要求用户不能刷新吧。

总结:
params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失,query并不会出现这种情况

④.vue如何根据返回的值对元素进行样式渲染

  • 最终显示样式:
    在这里插入图片描述
  • 代码实现:

在中需要显示的内容前面,添加图标元素,并添加对应的class样式。
其中,addclassStatus以及addclassPriority两个方法是自己定义的计算,根据属性值计算class样式的方法

在这里插入图片描述

  • 在vue中的 export default 中的methods中进addclassStatus以及addclassPriority方法的计算和赋值
    在这里插入图片描述
  • 在css文件中定义css样式

在这里插入图片描述

⑤.vue封装公共方法,并调用

首先,在assets文件夹下,新建js文件夹,创建common.js

export default {
    
    	
    	text(){
    
    
		
		console.log("测试,测试!!!")
	}
			
}

全局(多页面)使用:

在main.js中引入

/* 引入公共js*/
import common from '@/assets/js/common.js'
Vue.prototype.common=common;

在vue组件中使用

this.common.text();    //测试,测试!!!

单页面使用:

在vue的script中引入

import common from '@/assets/js/common.js'

在vue组件中使用

common.text();    //测试,测试!!!

另:static文件夹一般用来存放外部资源;assets文件夹一般存放自身资源

⑥.vue数据表格自定义序号排序(每页连续排序)

思路: 获取到数据,使用forEach为每一项动态添加index属性。

页面:
在这里插入图片描述data:

在这里插入图片描述

methods:
在这里插入图片描述

⑦.element-ui 的table中让某个单元格变色

 <el-table :cell-style="yellowBg"></el-table>
 
methods中:
    // 未指派时,背景变黄
rowIndex是第几行,columnIndex是第几列
    yellowBg ({
     
     row, column, rowIndex, columnIndex}) {
    
    
      if (row.statusName === '未指派' && columnIndex === 2) {
    
    
        return {
    
    
          background: '#eceb3c'
        }
      }
    },

在这里插入图片描述

⑧.vue+element-ui 表格中的时间格式化

在后台的管理页面中,用户信息需要增加创建时间,后台传过来的时间戳 (1491559642000)这样的格式,在表格中显示正常的 YYYY-MM-DD HH:mm:ss

下载moment.js

npm install moment --save
<el-table-column

  prop="createTime"

  :formatter="dateFormat"

  label="创建时间">	 

</el-table-column>

‘:formatter’ 来绑定 设置时间格式的方法 dateForma

在methods 中定义 dateForma

引入moment.js

import moment from 'moment'

methods:{
    
    

    dateForma:function(row,column){
    
    

        var date = row[column.property];

        if(date == undefined){
    
    return ''};

        return moment(date).format("YYYY-MM-DD HH:mm:ss")

    }

}

在这里插入图片描述

⑨.Element表格单元格的几种点事件

1.cell-click 单元格触发事件

<template>
      <el-table :data="tableData" style="width: 100%" @cell-click="goclick">
        <el-table-column prop="date" label="日期" width="180">
        </el-table-column>
        <el-table-column prop="name" label="姓名" width="180">
        </el-table-column>
        <el-table-column prop="address" label="地址">
        </el-table-column>
      </el-table>
    </template>

    methods: {
    
    
      goclick(row,column,event,cell) {
    
    
          console.log(row,column,event,cell)
        }
    }

2.普通click点击事件

<template>
      <el-table :data="tableData" style="width: 100%">
        <el-table-column prop="date" label="日期" width="180">
        </el-table-column>
        <el-table-column prop="name" label="姓名" width="180">
        </el-table-column>
        <el-table-column prop="address" label="地址">
          <template slot-scope="scope">
            <div @click='goclick(scope.row.address)'>{
    
    {
    
    scope.row.address}}</div>
          </template>
        </el-table-column>
      </el-table>
    </template>
    methods: {
    
    
      goclick(address) {
    
    
          console.log(address)
        }
    }

猜你喜欢

转载自blog.csdn.net/WuqibuHuan/article/details/118367383