常用积累

88 阅读2分钟

1. CSS中 设置( 单行、多行 )超出显示省略号

  • 单行文本溢出显示省略号…
  • 多行文本溢出显示省略号…
overflow:hidden; 
white-space: nowrap; 
text-overflow: ellipsis;
-o-text-overflow:ellipsis;

2. 多行文本溢出显示省略号

  • 1、使用 overflow:hidden; 语句不显示超过对象尺寸的内容,就是把超出的部分隐藏了;
  • 2、使用 -webkit-line-clamp: 行数; 语句限制显示文本的行数;
  • 3、使用 text-overflow:ellipsis; 语句用省略号“…”隐藏超出范围的文本
.text-ellipsis{
  overflow:hidden;
  text-overflow: ellipsis;
  -webkit-line-clamp: 3;
  display: -webkit-box;
  -webkit-box-orient: vertical;
}

3. 解决Echarts tab切换时,图表宽高被压缩的问题(给组件添加v-if)

69dc5ccc0b8194efe97da1a8d3f1e25.png

4. Promise的初封装

import axios from 'axios';

let baseURL; // process.env.NODE_ENV环境
if(process.env.NODE_ENV=='development'){
    baseURL = 'http://127.0.0.1:3000/api'
}else{
    baseURL = '/xxx'
}

const $http = axios.create({
    baseURL,
})

// 分别暴露
export const get = (url,params)=>{
    params = params || {};
    return new Promise((resolve,reject)=>{
        // axiso 自带 get 和 post 方法
        $http.get(url,{
            params,
        }).then(res=>{
            if(res.data.status===0){
                resolve(res.data);
            }else{
                alert(res.data.msg)
            }
        }).catch(error=>{
            alert('网络异常');
        })
    })
}

export const post = (url,params)=>{
    params = params || {};
    return new Promise((resolve,reject)=>{
        $http.post(url,params).then(res=>{
            if(res.data.status===0){
                resolve(res.data);
            }else{
                alert(res.data.msg);
            }
        }).catch(error=>{
            alert('网络异常');
        })
    })
}
  • 如何引用呢?

import { get, post } from "./utils/index";
Vue.prototype.$http = {
  get,
  post
}
  • 这里使用了构造函数的原型prototype声明一个全局变量,并且把封装好的get和post方法放在里面

5. 父子组件,Vue中的数据是单向数据流:父级 prop 的更新会向下流动到子组件中,但是反过来则不行,即子组件无法直接修改父组件中的数据。

但我们常常会遇到需要在子组件中修改父组件数据的场景。.sync修饰符就可以帮助我们实现这种功能。

1.父组件

  //:is-show.sync="detailVisible"
 <WriteOffDialog :visible.sync="writeOffShow" ></WriteOffDialog>

2.子组件

 cancel() {
     this.$emit('update:visible', false)
     //this.$emit('update:isShow', false)
     // 或者如下也可以
     //this.$emit('update:is-show', false)
     },

或者

// 父组件
<todo-list :list.sync="list" />
 
// 子组件
methodName(index) {
    this.$emit('update:list', this.newList)
}

3.子组件深拷贝

在子组件修改props的方法:

//1. 子组件data中拷贝一份,注意引用类型需要深拷贝,根据需求可以watch监听

data() {
    return {
        newList: this.list.slice()
    }
},
watch: {
    list(newVal) {
        this.newList = newVal
    }
}
// 2. 通过计算属性修改 
computed: { 
nList() 
  { 
      return this.list.filter(item => { return item.isChecked }) 
  } 
}