• 前端相关免查整合-vue、es、工具类等


    知识

    工具篇

    网页

    取色器

    F12 之后, style里面选一个颜色,然后点击铅笔,复制值

    dayjs

    用法

    const date = dayjs('2021-09-01');
    const formattedDate = dayjs('2021-09-01').format('YYYY-MM-DD');
    console.log(formattedDate); // 输出:2021-09-01
    
    
    • 1
    • 2
    • 3
    • 4

    常用

    刷新页面

    router.go(0)
    location.reload()
    
    • 1
    • 2

    TS篇

    数据类型定义

    基本类型

    类型包含:

    布尔类型 boolean
    数字类型 number
    字符串类型 string
    数组类型 array
    元组类型 tuple
    枚举类型 enum
    任意类型 any
    null 和 undefined
    void类型
    never类型

    let title = '张三'
    let age = 18
    let loading = true
    let obj = null
    let total = undefined
    
    # 带类型限制
    let title:string = '张三'
    let age:number = 18
    let loading:boolean = true
    let obj:null = null
    let total:undefined = undefined
    
    # 多种类型
    let title:number|string = 18
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    引用类型

    数组

    # 数组
    let arr = [1, 2, 3]
    
    # 带类型
    let arr:number = [1, 2, 3]
    let arr:Array = [1, 2, 3]
    
    # 已知数组的长度和类型:在TS中称为元组类型
    let arr: [string, number] = ['张三', 18]
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    数组操作

    基础操作:
    
    shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined
    var a = [1,2,3,4,5];
    var b = a.shift(); //a:[2,3,4,5] b:1
    
    unshift:将参数添加到原数组开头,并返回数组的长度
    var a = [1,2,3,4,5];
    var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
    (IE6.0下测试返回值总为undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。)
    
    pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined
    var a = [1,2,3,4,5];
    var b = a.pop(); //a:[1,2,3,4] b:5
    
    push:将参数添加到原数组末尾,并返回数组的长度
    var a = [1,2,3,4,5];
    var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7
    
    concat()可以将两个数组合并在一起,如果是使用ES6语法也可以用扩展运算符…来代替
    var a = [1,2,3,4,5];
    var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]
    
    splice(start,deleteCount,val1,val2,…):从start位置开始删除deleteCount项,并从该位置起插入
    var a = [1,2,3,4,5];
    var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
    var b = a.splice(0,1); //同shift
    a.splice(0,0,-2,-1); var b = a.length; //同unshift
    var b = a.splice(a.length-1,1); //同pop
    a.splice(a.length,0,6,7); var b = a.length; //同push
    
    reverse:将数组反序
    var a = [1,2,3,4,5];
    var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]
    
    
    sort(orderfunction):按指定的参数对数组进行排序
    var a = [1,2,3,4,5];
    var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]
    
    
    
    slice(start,end):可以截取出数组某部份的元素为一个新的数组,有两个必填的参数,第一个是起始位置,第二个是结束位置( 操作时数字减1 )
    var a = [1,2,3,4,5];
    var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]
    
    
    join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
    var a = [1,2,3,4,5];
    var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"
    
    let a = [1,2,3,4,5,6,7,8];
    console.log(a.join()); // 1,2,3,4,5,6,7,8
    console.log(a.join('')); // 12345678
    console.log(a.join('@@'));
    // 1@@2@@3@@4@@5@@6@@7@@8
    
    
    .Array和Object的特性
    //Array:
    /*新建:*/var ary = new Array(); 或 var ary = [];
    /*增加:*/ary.push(value);
    /*删除:*/delete ary[n];
    /*遍历:*/for ( var i=0 ; i < ary.length ; ++i ) ary[i];
    //Object:
    /*新建:*/var obj = new Object(); 或 var obj = {};
    /*增加:*/obj[key] = value; (key为string)
    /*删除:*/delete obj[key];
    /*遍历:*/for ( var key in obj ) obj[key];
    Object完全可以作为一个集合来使用
    
    
    (1)如果我们要在Array中检索出一个指定的值,我们需要遍历整个数组: 
        var keyword = ;
      for ( var i=0 ; i < ary.length ; ++i )
      {
      if ( ary[i] == keyword )
      {
      // todo
      }
    }
    (2)在Object中检索一个指定的key的条目,只需要是要使用:
        var key = '';
      var value = obj[key];
    // todo
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    copyWithin()

    从数组的指定位置拷贝元素到数组的另一个指定位置中。

    filter()
    • filter()会将数组中的「每一个」元素带入指定的函数内做判断,如果元素符合判断条件则会返回,组成一个新的数组。
    let a = [1,2,3,4,5,6,7,8];
    console.log(a.filter(e => e > 3));
    // [4, 5, 6, 7, 8]
    console.log(a.filter(e => e%2 == 0));
    // [2, 4, 6, 8]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    find()
    • find()会将数组中的「每一个」元素带入指定的函数内做判断,并会返回第一个符合判断条件的元素,如果没有元素符合则会返回undefined。
    let a = [1,2,3,4,5,6,7,8];
    console.log(a.find(e => e > 3)); // 4
    console.log(a.find(e => e < 0)); // undefined
    
    
    • 1
    • 2
    • 3
    • 4
    forEach()
    • forEach()会将数组中每个元素套用到指定的函数里进行运算,函数有三个参数,第一个参数表示每个元素的值( 必填),第二个参数为该元素的索引值( 选填),第三个参数则表示原本的数组( 选填)。
    let a = [1,2,3,4,5];
    let b = 0;
    a.forEach(item => {
        b = b + item;
    });
    console.log(b); // 15 ( 1+2+3+4+5 )
    如果结合第二和第三个参数进行搭配使用,就能做到改变原本数组的效果。
    
    let a = [1,2,3,4,5];
    a.forEach((item, index, arr) => {
        arr[index] = item * 10;
    });
    console.log(a); // [10,20,30,40,50]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    includes()

    判断一个数组是否包含一个指定的值

    let a = [1,2,3,4,5,6,7,8];
    console.log(a.includes(2));
    // true
    console.log(a.includes(2,2));
    // false ( 在 3,4,5,6,7,8 查找有没有 2 )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    indexOf()lastIndexOf()
    • indexOf()会判断数组中是否包含某个值,判断的方式为「由左而右」,如果有包含就返回这个值在数组中的索引值,如果没有就返回-1,有两个参数,第一个参数表示要判断的值( 必填),第二个参数表示从数组的哪个位置开始判断( 选填,预设为0 )。
    let a = [1,2,3,4,5,6,7,8];
    console.log(a.indexOf(4)); // 3
    console.log(a.indexOf(4,5));
    // -1 ( 在6,7,8中搜索有沒有4 )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    lastIndexOf()会判断数组中是否包含某个值,判断的方式为「由右而左」,如果有包含就返回这个值在数组中的索引值,如果没有就返回-1,这个方法有两个参数,第一个参数表示要判断的值( 必填),第二个参数表示判断从数组的哪个位置开始从右往左查找( 选填,默认为整个数组长度-1 )。

    let a = [1,2,3,4,5,6,7,8];
    console.log(a.lastIndexOf(3)); // 2
    console.log(a.lastIndexOf(3,1));
    // -1 ( 只在1,2中判断,所以沒有 3 )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    some()[sʌm]

    检测数组元素中是否有元素符合指定条件

    • some()会将数组中的「每一个」元素带入指定的函数内做判断,只要有任何一个元素符合判断条件,就会返回true,如果全都不符合,才会返回false。
    let a = [1,2,3,4,5,6];
    console.log(a.some(e => e > 3));
    // 返回 true,因为 4、5、6 大于 3
    console.log(a.some(e => e > 6));
    // 返回 fasle,因为全都小于或等于 6
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    fill()
    • fill()会把数组中所有元素,置换为指定的值,fill()有三个参数,第一个是准备要置换的内容(必填),第二个是从什么位置开始置换(选填,不设定就全部置换) ,第三个是停止置换的元素的前一个位置(选填,预设等于数组长度)。
    let a = [1,2,3,4,5,6,7,8];
    a.fill('a');
    console.log(a); // ['a','a','a','a','a','a','a','a']
    let b = [1,2,3,4,5,6,7,8];
    b.fill('b',3,5);
    console.log(b); // [1,2,3,'b','b',6,7,8]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    length()
    • length可以取得数组的长度。
    let a = [1,2,3,4,5,6,7,8];
    console.log(a.length); // 8
    
    • 1
    • 2
    findIndex()
    • findIndex()会将数组中的「每一个」元素带入指定的函数内做判断,并会返回第一个符合判断条件元素的位置索引,如果没有元素符合则会返回-1。
    let a = [1,2,3,4,5,6,7,8];
    console.log(a.findIndex(e => e > 3)); // 3
    console.log(a.findIndex(e => e < 0)); // -1
    
    
    • 1
    • 2
    • 3
    • 4
    reduce()、reduceRight()

    reduce()可以将数组中每个元素进行计算,每次计算的结果会再与下个元素作计算,直到结束为止,里头包含一个函数( 必填) 和初始计算的数值( 选填),函数内有四个参数,第一个是计算的值( 必填),第二个是取得的元素(必填),第三个是该元素的索引值( 选填),第四个是原本的数组(选填)。

    let a = [1,2,3,4,5,6,7,8];
    let b = a.reduce(function(total, e){
        return total + e;
    });
    console.log(b); // 36 ( 1+2+3+4+5+6+7+8=36 )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    flat()
    • flat()可以将一个多维数组的深度转成一维(扁平化或称作降维),它有一个选填的参数,代表要转换的深度数字,预设为1(只展开一层放到一维数组里,如果是2,只展开2层放到一维数组里),如果深度有很多层,可使用Infinity来全部展开成一维数组。
    let a = [1,2,[3],[4,[5,[6]]]];
    let b = a.flat();
    let c = a.flat(2);
    let d = a.flat(Infinity);
    console.log(b); // [1, 2, 3, 4, [5, [6]]]
    console.log(c); // [1, 2, 3, 4, 5, [6]]
    console.log(d); // [1, 2, 3, 4, 5, 6]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    flatMap()
    • flatMap()的方法等于map()和flat()的组合,在运算后直接将数组扁平化处理。
    let a = [1,2,[3],[4,5]];
    let b = a.flatMap(e => e+1);
    let c = a.map(e => e+1).flat();
    console.log(b);
    // [2, 3, "31", "4,51"] ( 可以看到 b 和 c 得到的结果相同 )
    console.log(c);
    // [2, 3, "31", "4,51"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    Array.isArray()
    • Array.isArray()能判断一个元素是否为数组,如果是就返回true,不然就返回false。
    let a = [1,2,3,4,5,6,7,8];
    let b = 123;
    let c = 'hello';
    let d = {d1:1,d2:2};
    console.log(Array.isArray(a)); // true
    console.log(Array.isArray(b)); // false
    console.log(Array.isArray(c)); // false
    console.log(Array.isArray(d)); // false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    Array.from()

    Array.from()会将「类数组」或是「可迭代的对象」转换成数组,Array.from()有两个参数,第一个参数为「类数组对象」或「可迭代的对象」(必填),第二个参数则是改变转换成数组元素的函数(选填)。

    类数组对象具有length 属性以及索引化index 的元素,可迭代对象表示具有可以利用迭代的方式取得它自己本身的元素,例如Map 和Set…等。( 参考MDN 说法 )

    let a = 'abcde';
    let b = Array.from(a);
    console.log(b); // ['a','b','c','d','e']
    let c = Array.from(a, e => e + e);
    console.log(c); // ['aa','bb','cc','dd','ee']
    类数组对象写法必须包含length 属性,且对象的key须为0开始的数字,对应转换后的元素索引。
    
    let a = {
        '0': 14,
        '2': 13,
        '1': 7,
        '3': 9,
        '4': 6,
        length: 5
    };
    let b = Array.from(a);
    console.log(b); // [14,7,13,9,6]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    Array.of()
    • Array.of()可以快速将数字、字串等内容,转换成数组。
    let a = Array.of(1,'a',2,'b',3);
    console.log(a);
    // [1, "a", 2, "b", 3]
    
    
    • 1
    • 2
    • 3
    • 4
    toString()
    • toString()会把整个数组转换成字符串。
    let a = [1,2,3,4,5,6,7,8];
    let b = a.toString();
    console.log(b);
    // 1,2,3,4,5,6,7,8
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    every()
    • every()会将数组中的「每一个」元素带入指定的函数内做判断,只要有任何一个元素不符合判断条件,会回返回false,如果全部符合,就会回传true。
    let a = [1,2,3,4,5,6];
    console.log(a.every(e => e > 3));
    // fasle ( 因为1、2 小于 3,3 等于 3 )
    console.log(a.every(e => e > 0));
    // true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    keys()
    • keys()会返回数组中的每一个索引值( key )成为一个新的Array Iterator对象,因为是Array Iterator对象,可以使用for…of进行迭代。
    let a = ['a','b','c','d','e'];
    let b = a.keys();
    for (let key of b) {
        console.log(key); // 1、2、3、4、5
    }
    Object.keys({name:"123"})//["name"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    valueOf()
    • valueOf()会返回数组的原始值,如果原本的数组有修改,那么返回的原始值也会跟着改变(相当浅复制)
    let a = [1,2,3,4,5,6,7,8];
    let b = a.valueOf();
    console.log(a);
    // [1, 2, 3, 4, 5, 6, 7, 8]
    let c = a.valueOf();
    a.shift();
    console.log(a);
    // [2, 3, 4, 5, 6, 7, 8]
    console.log(b);
    // [2, 3, 4, 5, 6, 7, 8] ( 因为 a 的原始值更新了,所以 b 也变了 )
    console.log(c);
    // [2, 3, 4, 5, 6, 7, 8]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    map
    et map:Map = new Map();
    // let map:Map = new Map([["刘天悦",10],["王明",20]]);
    
    
    // 迭代map 
    for(let entry of map.entries()){
      console.log("entries1",entry[0], entry[1]);
    }
    for(let [key,value] of map.entries()) {
      console.log("entries2",key, value);
    }
    
    // 遍历map
    map.forEach((value:number,key:string,map:Map)=>{
      console.log("forEach",key,value);
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    Map

    数组转Map

    const map = new Map(res.map(item =>[item.date, item]));
    
    
    • 1
    • 2

    初始化

    const initMap = new Map(
      [
      ["key1", {
        date: "string",
        details: Array
      }]
    
    ]
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    对象

    let obj = {
      name: '张三',
      age: 18
    }
    
    #带类型
    
    interface Props {
      name: string,
      age: number
    }
    
    let obj: Props = {
      name: '张三',
      age: 18
    }
    
    console.log(obj)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    实例化
    注意
    
    class test {
      name: string
      value?: string
    }
    
    使用new 实例化,会带可选属性,值为undefined,
    let a = new test()
    
    不想带属性,可用, 后续可再加值
    let a = {
    	name: 'aaa'
    }
    if(value){
    	a.value = value
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    接口

    interface Props {
      name: string,
      age: number,
      title?:string
    }
    
    #问号和冒号表示该属性可能有可能没有
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    枚举

    enum Gender {
      BOY,
      GIRL
    }
    
    console.log(Gender.BOY) // 0
    console.log(Gender.GIRL) // 1
    
    #默认值
    enum Gender {
      BOY = 1001,
      GIRL = 1002
    }
    
    console.log(Gender.BOY) // 1001
    console.log(Gender.GIRL) // 1002
    
    # 常数
    const enum Gender {
      BOY,
      GIRL
    }
    
    console.log(Gender.BOY) // 0
    console.log(Gender.GIRL) // 1
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    任意类型

    let todo:any = 'go home'
    
    
    • 1
    • 2

    函数

    #有返回值
    function todo(a: number): number {
      return a
    }
    
    #无返回值
    function todo(a: number): void {
      console.log(a)
    }
    
    #函数抛出错误,永远不会执行完成(如死循环),使用never
    function demo(): never {
      throw new Error('出错了')
    }
    
    ##  泛型、传参、返回值类型约定
    
    export function transformObjectToRoute(routeList: RouteItemResponse[]): T[] {
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    类型断言

    let a: number|string;
    console.log(a.toFixed(2)) #错误
    
    let a:number|string;
    console.log((a as number).toFixed(2))
    console.log((a).toFixed(2))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    字面量

    type Gender = 1 | 2;
    let boy:Gender = 1;
    let girl:Gender = 2;
    
    
    • 1
    • 2
    • 3
    • 4

    文件下载

    请求头

    要加 responseType: ‘blob’

    export function downloadRecord(search: consumptionRecordSearch) {
        return request.post>({
            url: API.RECORD_EXPORT_URL,
            data: search,
            responseType: 'blob'
        }, {
            isTransformResponse: false
        });
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    方法

    const downloadImportTemplate = async () => {
      let response = await downloadTemplate();
      console.log('bb', response);
    
    
      const blob = new Blob([response], {
        type: 'application/vnd.ms-excel',
      });
      let link = document.createElement('a');
      link.href = URL.createObjectURL(blob);
      link.setAttribute('download', '人员模板文件.xlsx');
      link.click();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    类型判断

    if(value){
     
    }
    
    if(!value){
    	# 过滤 undefined 和空
    }
     
    # 判断 空字符串 / null / undefined
    
    function isEmpty(str) {
        return (!str || 0 === str.length);
    
    }
    
    
    console.log(null == undefined);//true
    console.log(null === undefined);//false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    函数、方法

    数组

    map

    Array.map() #有返回值,创建新数组
    #定义
    map(function(element, index, array) { /* ... */ 
    }, thisArg) 
    
    const mapNumbers = numbers.map(function(number) {
    	return number * 2;
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    foreach

    Array.forEach()  #只遍历
    #定义
    forEach(function(element, index, array) { /* ... */ 
    }, thisArg) 
    
    const numbers = [1, 2, 3, 4];
    
    numbers.forEach(function(number) {
    	mapNumbers.push(number * 2);
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    filter

    menuRouters.filter((v) => {
        return v.isTab || null == v.isTab;
      })
    
    • 1
    • 2
    • 3

    CSS篇

    居中

    text-align: center;
    
    .container {
       width: 300px; /* 设置容器的宽度 */
       margin: 0 auto; /* 水平居中 */
    }
    
    .container {
       display: flex;
       justify-content: center; /* 水平居中 */
       align-items: center;     /* 垂直居中 */
    } 
    
    .container {
      display: grid;
      place-items: center; /* 水平和垂直居中 */
    }
    
    .container {
       position: absolute;
       left: 50%;
       transform: translateX(-50%);
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    按钮居右

    .button{
    float:right;
    }
    
    .button{
    position:absolute;
    right:0;
    }
    
    .container{
    position:relative;
    }
    .button{
    position:absolute;
    right:0;
    top:50%;
    transform: translateY(-50%);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    边距

    padding-top:20px;上内边距
     
     
    padding-right:30px;右内边距
     
     
    padding-bottom:30px;下内边距
     
    padding-left:20px;左内边距
     
    padding:1px四边统一内边距
     
    padding:1px1px上下,左右内边距
     
    padding:1px1px1px上,左右,下内边距
     
    padding:1px1px1px1px上,右,下,左内边距
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    透明度

    CSS透明度是指网页中元素的不透明度程度。在CSS中,可以使用opacity属性来设置元素的透明度,取值范围为0到1,其中0表示完全透明,1表示完全不透明。除了opacity属性外,还可以使用rgba()函数来设置元素的背景颜色透明度,其中最后一个参数表示透明度,取值范围也是0到1。例如,
    
    background:rgba(255,0,0,0.5) 表示设置元素的背景颜色为红色,透明度为50%。12
    
    • 1
    • 2
    • 3

    VUE篇

    vue3

    组件通信

    子传递父

    子
    const emit = defineEmits(['manage-product', 'delete-item']);
    
    emit('manage-note', note);
    
    父
    @delete-item="handleDeleteItem"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    事件

      父传递子

      子 
      
      
      const props = defineProps({
        type: String,
      });
      
      父
      
      
      
      
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

      组件之间

      仓库

      export const useUserStore = defineStore('user', {
      
      })
      
      import { useSettingStore, useUserStore } from '@/store';
      
      const user = useUserStore();
      
      user....
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      字符串拼接

      :class="[ 'string' + index, 'string2' ]"
      
      :action=" path + 'string' "
      
      :class="{ red : index == 2 , [ 'layout' + index ] : true }"
      
      • 1
      • 2
      • 3
      • 4
      • 5

      路由

      传参

       router.push('/detail/base?id=' + props.note.id);
       
       router.push({
          path: '/ab/c',
          query: {
            id :1
          }
        });
        
        router.push({
          path: `/ab/c/${props.note.id}`,
        });
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      获取

      import { useRoute, useRouter } from 'vue-router';
      const route = useRoute();
      
      const id = route.query.id;
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      路由跳转

      import { useRouter } from 'vue-router';
      const router = useRouter();
      router.push('/detail/base');
      
      • 1
      • 2
      • 3

      仓库

      仓库取值
      import { useUserStore } from '@/store';
      
      const userStore = useUserStore();
      const { token } = userStore;
      
      • 1
      • 2
      • 3
      • 4

      刷新页面

      router.go(0)
      
      • 1

      插槽

      写法

      v-slot 其简写形式为 #
      
      父组件在引入指定插槽时候,template指定插槽时必须使用 v-slot ,
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 相关阅读:
      JavaScript计算两个时间相差多少个小时的封装函数
      数据库到底是什么?举例MySQL给你讲明白
      Java--ArrayList的浅拷贝问题--原因/解决方案
      【论文阅读】Hypergraph Convolutional Network for Group Recommendation
      java计算机毕业设计基于ssm的汽车租赁出租系统(源代码+数据库+Lw文档)
      【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)
      apt-cache手册翻译
      Git的cherry-pick等一些小知识
      MySQL 行变列
      学习Loadrunner遇到问题记录
    • 原文地址:https://blog.csdn.net/yu619251940/article/details/134553516