-
GIt提交,无法检测到文件名称大小写的更改 解决:在当前项目中执行命令git config core.ignorecase false -
导出xlsx格式文件时,注意导出后:
string类型字段默认会左对齐,number类型字段默认右对齐 -
vue中禁用多选框checkbox,加上@click.native.prevent即可解决,阻止默认行为,disabled框会变灰 -
new Array(3).fill([])如果填充的类型为对象,那么被赋值的是同一个内存地址的对象,而不是深拷贝对象 -
ElementUI的el-table组件自适应宽度,在父元素display属性为flex时,会出现宽度一直增加的现象
解决:参照网上,或不使用flex布局 -
vue项目启动报错corejs的相关问题,可能是版本不兼容问题
解决:npm install core-js@2 -
JPEG是图像文件中的一种类型(格式),该类型的图像文件后缀名可以包含:JPEG 、JPG 、JPE 、JFIF。所以图像的MIME类型中不会有:image/jpg,有的只是:image/jpeg -
ElementUI日期框组件回显日期时,可能会出现回显正确但重新选择后日期未改变的情况
原因:回显赋值时,数据层级嵌套过深
解决:采用this.$set()赋值 -
小程序跳转页面传参,采用
?拼接参数的形式时,传递对象肯定会采用JSON.stringify()转成字符串进行传值
注意:①URL最大长度2048个字符(同GET请求);
② 若转义的对象中有\转义字符,需使用encodeURIComponent重新编码,在接收页面用decodeURIComponent再进行解码 -
ElementUI如果一定要使用v-if来实现切换效果,注意:
Vue会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这样也不总是符合实际需求,所以Vue为你提供了一种方式来表达“这两个元素是完全独立的,不要复用它们”。只需添加一个具有唯一值的key属性即可。 -
ElementUI表单校验,一个页面用了两个el-form。两个都写了校验,即每一个form-item都写了prop,但是form1有一个没有写。结果怎么提交都不对。
解决:把form1的prop都加上就解决啦,没有指定校验规则的也必须加上,必须在rules里面声明一个空的。 -
在
flex布局下,容器内的项目采用自撑开,在项目总宽度超出容器宽度时,项目宽度会自动收缩,且此时设置宽度也不起作用原因:
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。解决:将项目的
flex-shrink属性设置为0 -
ElementUI表单验证只有在设置required: true时才会在校验项前面显示红色的星号,如果是自定义校验且不能设置required: true,还想要红色星号,除了手动写css外,最简单的做法,在当前校验项直接添加class="is-required" -
axios请求为post类型时,参数中无data字段时,headers里的Content-Type无效果,这应该出于优化的层面,此时的Content-Length=0,无需向服务端提供Content-Type字段。 -
vant覆盖组件样式写法为:::v-deep -
清理定时器可以如下,采用程序化的事件侦听器的做法:
methods:{
fun(){
const timer = setInterval(()=>{
// TODO
},1000);
this.$once('hook:beforeDestory', () => {
clearInterval(timer);
timer = null;
})
}
}
-
fixed定位的元素,如果父级有transform样式,值不为none,那么fixed定位就会失效。
解决方法:使用transform样式的元素,不要包含fixed定位的子元素。 -
a、li等标签中使用img后的高度多了4px原因:
img是行内元素,默认display: inline; 它与文本的默认行为类似,下边缘是与基线(baseline)对齐,而不是紧贴容器下边缘解决:
- 1)将图像定义成
img:{display:block;} - 2)给父级设置固定高度,然后
overflow:hidden - 3)设置
font-size:0; - 4)设置
img的vertical-align: bottom; - 5)设置
img的margin-bottom: -4px;
- 1)将图像定义成
-
appendChild(),insertBefore()插入节点需注意的问题: 如果这两种方法插入的节点原本已经存在与文档树中,那么该节点将会被移动到新的位置,而不是被复制。 -
document.getElementById和document.querySelector的区别:-
1)
querySelectorAll属于W3C中的Selectors API规范 [1]。而getElementsBy系列则属于W3C的DOM规范 [2] -
2)
querySelectorAll方法接收的参数是一个CSS选择符,类似jq。而getElementsBy系列接收的参数只能是单一的className、tagName和name -
3)
querySelectorAll返回的是一个Static Node List,而getElementsBy系列的返回的是一个Live Node List。前者是快照,在之后再添加新的元素,不会影响已查询的结果;后者可以理解为一个仓库地址,查询出来的东西每次是不确定的,会跟随你之后的节点操作而动态改变。
-
-
assets文件夹与static文件夹的区别:assets文件是src下的,所以最后运行时需要进行打包,assets目录中的文件会被webpack处理解析为模块依赖,只支持相对路径形式。build的时候由Webpack解析为模块依赖。而模块是不可以直接用绝对路径来使用的,需要使用import或require先引入一下,才可以使用。static/目录下的文件并不会被Webpack处理:它们会直接被复制到最终的打包目录(默认是dist/static)下。必须使用绝对路径引用这些文件,这是通过在config.js文件中的build.assetsPublicPath和build.assetsSubDirectory连接来确定的。 -
在
package.json文件里有两个属性,一个是dependencies,另一个是devDependencies。前者适用于生产环境,后者适用于开发调试环境。有哪些包是install到dependencies?又有哪些包是install到devDependencies?
发布后还需要用到的安装到dependencies,如axios;只在开发环境用到的安装到devDependencies,如babel。 -
在启用
keep-alive后watch内的函数重复触发问题的原因:
keep-alive会将Vue实例始终保持在内存中,因此该Vue实例始终存续,相应的watchers始终生效。所以在复用同一个子组件时,会看到watch内的函数被调用多次。 -
记录:eslint、code formatter 代码格式化配置vscode的setting.json
"eslint.validate": [
"javascript",
"typescript",
"typescriptreact",
"javascriptreact",
"jsx",
"html",
"vue",
],
// code formatter
// 100 列后换行
"editor.wordWrapColumn": 100,
// 保存时格式化
"editor.formatOnSave": true,
// 开启 vscode 文件路径导航
"breadcrumbs.enabled": true,
// prettier 设置强制单引号
"prettier.singleQuote": true,
// prettier 设置语句末尾加分号
"prettier.semi": false,
// 选择 vue 文件中 template 的格式化工具
"vetur.format.defaultFormatter.html": "prettyhtml",
// 显示 markdown 中英文切换时产生的特殊字符
"editor.renderControlCharacters": true,
// 让函数(名)和后面的括号之间加个空格
"javascript.format.insertSpaceBeforeFunctionParenthesis": true,
// 让vue中的js按编辑器自带的ts格式进行格式化
"vetur.format.defaultFormatter.js": "vscode-typescript",
// vetur 的自定义设置
"vetur.format.defaultFormatterOptions": {
"prettier": {
"singleQuote": true,
"semi": false
}
},
// Ctrl + Shift + F 快捷键设置(依照vetur格式化代码)
"[vue]": {
"editor.defaultFormatter": "octref.vetur"
}
- 父组件监听子组件生命周期的简单方式:
// Parent.vue
<Child @hook:mounted="doSomething" ></Child>
doSomething() {
console.log('父组件监听到 mounted 钩子函数 ...');
},
// Child.vue
mounted(){
console.log('子组件触发 mounted 钩子函数 ...');
},
// 以上输出顺序为:
// 子组件触发 mounted 钩子函数 ...
// 父组件监听到 mounted 钩子函数 ...
-
对于抽象组件的理解: 自身不会渲染一个
DOM元素,也不会出现在父组件链中。就好比拦截组件,能够对嵌套在其中的子组件做一些事情。 -
如何区分伪类与伪元素? 答:元素就是结构,类就是样式。也就是说
::after是伪元素:hover是伪类。 -
element-ui中table组件动态加载数据时出现表格错乱闪烁的解决方案:
doLayout
对 Table 进行重新布局。当 Table 或其祖先元素由隐藏切换为显示时,可能需要调用此方法
在组件的updated生命周期中使用this.$refs['table'].doLayout()重新渲染表格。
-
当使用
refs时,如果refs自身的dom,或父级的dom是经过v-for渲染出来的,vue框架就会将refInFor设置成true然后ref.key在registerRef函数就被设置成了数组。 -
在父组件
mounted中获取子组件实例时,需要注意子组件的父级是否使用了v-if、v-show、v-for -
VUEJS文件扩展名esm.js和common.js是什么意思?
vue.js:vue.js则是直接用在<script>标签中的,完整版本,直接就可以通过script引用。
vue.common.js:预编译调试时,CommonJS规范的格式,可以使用require("")引用的NodeJS格式。
vue.esm.js:预编译调试时, EcmaScript Module(ES MODULE),支持import from 最新标准的。
vue.runtime.js:生产的运行时,需要预编译,比完整版小30%左右,前端性能最优。
vue.runtime.esm.js:生产运行时,esm标准。
vue.runtime.common.js:生产运行时,commonJS标准。
若是用vue+webpack开发项目(vue-cli采用的方式):
开发环境用vue.esm.js
生产环境用vue.runtime.esm.js,比完整版小30%左右,前端性能更优