1.把内容复制到剪贴板的功能
const input = document.createElement('textarea'); // 新增一个input
input.style.position = 'absolute'; // 将它隐藏(注意不能使用display或者visibility,否则粘贴不上)
input.style.zIndex = '-9';
input.style.left = "-999999px";
input.style.opacity = "0";
document.body.appendChild(input); // 追加
input.value = item;
input.select();// 选中文本
document.execCommand('copy'); // 执行浏览器复制命令
document.body.removeChild(input);
这里选择textarea没有选择input是因为textarea复制的内容,可以实现复制“回车”,而input不能实现;于此同时在复制的同时,主要防止不断创建元素,造成在页面生成太多元素,造成页面的性能和效果不好,因此复制完成后需要删除复制生成的元素,并且以防万一不能让它显示出来。
2.父子组件传参时控制台报错解决方法
尽量不要在子组件中修改父组件传过来的值,如果父组件传过来一个数组,数组中有多个对象,可以在子组件中这样操作,控制台就不会报错了。
//注意:这里的this.studentList是一个数组,数组中有多个对象
this.List.splice(0);
arr.forEach((item, index) => {
this.List.push(item);
});
如果实在是需要修改父组件传过来的值,可以如下操作:
//这是在子组件中
this.List2 = arr;
this.$emit("update",this.List1,this.List2);
//在父组件中
<FatherComponent @update="handle(arguments)"></FatherComponent>
handle(params) {
this.List1 = params[0];
this.List2 = params[1];
}
3.Object.assign()方法
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。简单来说,就是Object.assign()是对象的静态方法,可以用来复制对象的可枚举属性到目标对象,利用这个特性可以实现对象属性的合并。
Object.assign(target, ...sources)
参数: target--->目标对象
source--->源对象
返回值:target,即目标对象
我们可以看到source上的state属性合并到了target对象上。如果只是想将两个或多个对象的属性合并到一起,不改变原有对象的属性,可以用一个空的对象作为target对象。像下面这样:
var result=Object.assign({},target,source);
没有同名的属性会直接复制到目标对象上,同名的属性后面的属性值会覆盖前面的同名属性值。
1、Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象,继承属性和不可枚举属性是不能拷贝的。
2、针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。
3、目标对象自身也会改变
4、异常会打断后续拷贝任务