Vue学习碎片之运算符(...、:、@、#)

扩展运算符(…)

基于ES6语法,扩展运算符可以将一个数组转换为用逗号分隔的参数序列,好比rest参数的逆运算。

// 1.拆分数组
console.log(...[1, 2, 3])
// 1 2 3

// 2.在数组中添加元素
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5

// 3.在数组中删除元素(取出一个元素)
const [first, ...rest] = [1, 2, 3, 4, 5];
console.log(first);		// 打印结果 1
console.log([...rest]); 	// 打印结果 [2, 3, 4, 5]

const [one, ...last] = ["foo"];
console.log(one);		// 打印结果 foo
console.log([...last]);		// 打印结果 []

// 4.数组的合并
// ES6 的写法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
arr1.push(...arr2);
console.log(arr1); // 打印结果 [0, 1, 2, 3, 4, 5]
// 推荐使用写法
console.log([...arr1, ...arr2]); // 打印结果 [0, 1, 2, 3, 4, 5]
 
// 5.将字符串转成数组
let iString = 'zhongguoren';
console.log([...iString]); // 打印结果 ["z", "h", "o", "n", "g", "g", "u", "o", "r", "e", "n"]
 
// 6.Map 和 Set 结构, Generator 函数
let map = new Map([
  [1, 'one'],
  [2, 'two'],
  [3, 'three'],
]);
let arr = [...map.keys()];
console.log(arr);
// 打印结果 [1, 2, 3]
 
// 7.当做参数传递和直接传数组的区别
iClick4() {
    let iArray = ['1', '2', '3'];
    //注意传的时候,就要三个点
    this.hanshu(...iArray);
},
hanshu(...iArray) {
    let ooo = 1;
    console.log(...iArray);
    // 打印结果 1 2 3
},
        
// 8.求出最大值
let iArray = [1, 2, 3, 99, 44, 66, 21, 85, 77];
let ooo = Math.max(...iArray);
console.log(ooo);
// 打印结果 99
 
// 9.如果对没有iterator接口的对象,使用扩展运算符,将会报错。
let obj = {
  name: 'zhh',
  age: '20'
}
console.log([...obj]);  

// 10.添加一个属性
let a = {age: 18, id: 10};
let c = {name: 'zhh', ...a};
console.log(c);    
// 打印结果  {name: "zhh", age: 18, id: 10}
 
// 11.修改一个属性
let a = {name: 'zhh', age: 18, id: 10};
let c = {...a, name: 'zhh1'};
console.log(c);    
// 打印结果  {name: "zhh1", age: 18, id: 10}
 
// 12.删除一个属性(拿出属性或者对象)
let a = {name: 'zhh', age: 18, id: 10};
let {name, ...c} = a;
console.log(name, c);    
// 打印结果 zhh {age: 18, id: 10}

原文链接

特殊运算符(“:”、“.”、“@”、“#”)

“:” 是指令v-bind的缩写,“@”是指令v-on的缩写,“#”是v-slot的缩写;“.”是修饰符。

作用域插槽和具名插槽(v-slot)

slot:子组件提供给父组件的可以自定义的HTML模板,可以想象成子组件暴露给父组件的一个接口。作用是可以更好地横向扩展和定制化组件,例如弹窗组件、表格组件。分为默认插槽、具名插槽和作用于插槽。其中前两个都是渲染在父级,本质上就是替换,父组件渲染完毕之后替换对应的 slot;区别在于具名插槽就是给插槽取了名字;而作用域插槽在组件内部渲染。本质上会把父组件的内容渲染成函数,子组件调用函数,并且将数据传递给它。当需要将子组件的数据交给父组件展示,此时就可以使用作用域插槽。给数据一个新的作用域,因此叫做作用域插槽

//Child.vue
<template>
<div>
<main>
//默认插槽
<slot>
//slot内为后备内容
<h3>没传内容</h3>
</slot>
</main>

//具名插槽
<header>
<slot name="header">
<h3>没传header插槽</h3>
</slot>
</header>

//作用域插槽
<footer>
<slot name="footer" testProps="子组件的值">
<h3>没传footer插槽</h3>
</slot>
</footer>
</div>
</template>

<style scoped>
div{
border:1px solid #000;
}
</style>
  • 作用域插槽允许子组件将数据传递到父组件中的插槽内容中,使得父组件可以使用子组件中的数据进行渲染
  • 在vue2中,作用域插槽通过<slot>元素的name属性以及<template slot-scope="props">来实现
  • 在vue3中,作用域插槽的语法发生了变化,使用v-slot指令和新的#符号来指定插槽的作用域
    参考
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值