随笔随笔随笔

1、优雅导入组件等文件

index.js

// 三个参数
// directory {String} -读取文件的路径
// useSubdirectories {Boolean} -是否遍历文件的子目录
// regExp {RegExp} -匹配文件的正则
// require.context(‘./test’, false, /.test.js$/);
// 上面的代码遍历当前目录下的test文件夹的所有.test.js结尾的文件,不遍历子目录
const contexts = require.context('./', false, /\.vue$/)
const components = []
let removeList = [] //要排除某个文件
contexts.keys().forEach(key => {//遍历子目录
    const name = key.replace(/(\.\/|\.vue)/g, '')
    removeList.includes(name) ? '' : components[name] = resolve => require([`${key}`], resolve)
})
//由export default改为 export
export {
    components
}

2、prop

父组件给子组件通常通过props传值,如果需要做一些强校验则可以使用validator
如父组件传入一个propType参数,规定只能传入’text’, ‘number’或者’letter’其中一种就可以这么写:

props: {
	propType: {
		type: String,
		default:  'text',
		validator() {
			return ['text', 'number','letter'].indexOf(propType) > -1
		}
 	}
}

又或者你想传入一个参数,但是想限制它的长度,那你也可以使用validator进行强校验

props: {
	lintLength: {
		type: Array,
		default: () => [],
		validator() {
			return lintLength.length < 6
		}
 	}
}

3、插槽

深受启发
https://blog.csdn.net/weixin_66375317/article/details/124673576

3.1、默认插槽(自动填坑)

3.2、具名插槽(对应填坑)

v-slot: 可以简化成#

3.3、作用域插槽(携带参数)


默认插槽 =》1. 子组件标签下不使用template写html结构 2. 子组件通过
具名插槽 => 1. 子组件标签下使用template =》包裹传递html结构 =》template上提供名字#插槽名 2. 子组件通过传递数据=》子传父
作用域插槽=> 1. 子组件<slot name=“插槽名” :传递数据的名字=“变量”> 2. 父组件=》<template #插槽名=“接收数据对象”>

4、 单作用域 slot 的简写(不需要模板标签!)

Scoped slot 比较有趣,但为了使用它们,你也必须使用很多template标签。
然而有一个速记可以让我们摆脱它,但前提是我们使用单个作用域slot。

可以不用这样写:

<DataTable>
  <template #header="tableAttributes">
    <TableHeader v-bind="tableAttributes" />
  </template>
</DataTable>

可以这么写:

<DataTable #header="tableAttributes">
  <TableHeader v-bind="tableAttributes" />
</DataTable>