先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
{“id”:4,“parent”:0,“addr”:“重庆”},
{“id”:31,“parent”:3,“addr”:“重庆”},
{“id”:32,“parent”:3,“addr”:“重庆”}
];
而树控件使用的data 则是嵌套数据,我们如果每次使用都需要为它们专门做一个函数有点多余,我们可以用前端转换的方式来实现树数据的转换。
具体操作可以参考:https://blog.csdn.net/unamattin/article/details/77152451
//二维列表转树形控件所需嵌套数据格式
export function getJsonTree(data, config) {
const id = config.id || ‘id’; const pid = config.pid || ‘pid’;
const children = config.children || ‘children’;
const label = config.label || ‘name’;// 默认label为name字段
const idMap = []; const jsonTree = [];
data.forEach(function(v) {
idMap[v[id]] = v;
});
data.forEach(function(v) {
const parent = idMap[v[pid]];
if (parent) {
!parent[children] && (parent[children] = []);
parent[children].push(v);
} else {
jsonTree.push(v);
}
});
// treeAddIcon(jsonTree, label);// 循环遍历给tree加图标
return jsonTree;
}
这样树列表的绑定操作如下代码所示。
getTree() { // 树列表数据获取
var param = {
SkipCount: 0,
MaxResultCount: 1000
}
category.GetAll(param).then(data => {
this.treedata = [];// 树列表清空
var list = data.result.items
if (list) {
// console.log(list)
// 使用getJsonTree函数,实现对二维表转换为嵌套树对象集合
var newTreedata = getJsonTree(list, {
id: ‘id’,
pid: ‘pid’,
children: ‘children’,
label: ‘categoryName’
});
// console.log(newTreedata)
this.treedata = newTreedata
}
});
},
顺便说一下,由于引入一些原始控件需要实现很多相应的操作,一般情况下,我们可以把树控件常规的处理封装成一个组件的方式使用,其中包括了常规的过滤、选中等操作处理。如下是我们简单封装的树控件的自定义组件,用于处理常规的树列表信息。
这样使用起来,界面代码减少很多,只需要实现对应的事件即可。
<myTree :data=“treedata” :default-expand-all=“false” icon-class=“el-icon-price-tag” @nodeClick=“nodeClick” />
另外,更高维度上,我们还可以把业务界面按模块分离出来,实现不同的界面的组装,这样可以减轻代码的臃肿程度,提高代码可读性。
如之前说过的机构信息,页面逻辑比较多,可以简化为各个不同的模块,然后拼装组件即可。
例如:对于权限系统中的每个角色,除了包含基本信息外,还会包含拥有的权限(功能控制点)、包含用户,以及拥有的菜单,其中权限是用来控制界面元素,如操作按钮的显示的,而拥有的菜单,则是用户以指定账号登录系统后,获得对应角色的菜单,然后构建对应的访问入口的。角色界面模块UML类图如下所示。
那么对应界面元素上,我们就应该以不同的Tab来展示这些信息,每个Tab内容部分就可以作为一个独立的界面组件来开发。
====================================================================
按钮比较常用,一般我们依照常规的方式使用,并设置样式即可。
代码如下所示:
默认按钮
主要按钮
成功按钮
信息按钮
警告按钮
危险按钮
朴素按钮
主要按钮
成功按钮
信息按钮
警告按钮
危险按钮
圆角按钮
主要按钮
成功按钮
信息按钮
警告按钮
危险按钮
我在之前的界面中采用的按钮样式如下所示。
后来我觉得把按钮组合起来更好看,也更节省空间。
这里其实就是使用了按钮组的作用。
<el-button icon=“el-icon-search” type=“primary” size=“mini” round @click=“search()”>查询
<el-button icon=“el-icon-refresh-left” type=“warning” size=“mini” round plain @click=“resetSeachForm(‘searchForm’)”>重置
<el-button icon=“el-icon-plus” type=“success” size=“mini” round @click=“showAdd()”>添加
<el-button icon=“el-icon-document-remove” type=“danger” size=“mini” round :disabled=“listSelection.length === 0” @click=“batchDelete()”>批量删除
<el-button icon=“el-icon-upload2” type=“warning” size=“mini” round @click=“showImport()”>导入
<el-button icon=“el-icon-download” :loading=“downloadLoading” type=“primary” size=“mini” round @click=“handleDownload()”>导出
=====================================================================
表格控件是我们展示数据库二维表内容的重要承载,一般在主列表页面中展示表格数据。
表格控件的使用也比较简单,简单案例的代码所示。
<el-table
:data=“tableData”
border
style=“width: 100%”>
<el-table-column
prop=“date”
label=“日期”
width=“180”>
<el-table-column
prop=“name”
label=“姓名”
width=“180”>
<el-table-column
prop=“address”
label=“地址”>
但往往我们处理表格列的各种内容承载的时候,需要丰富很多,如包括标签、Switch开关,按钮操作、日期格式化、内容转换等操作。
如标签列,可以进行循环处理。
<el-tag
v-for=“tag in scope.row.tags.split(‘,’)”
:key=“tag”
type=“primary”
{{ tag }}
或者结合过滤器进行处理。
{{ scope.row.state | stateFilter }}
日期,我们也用日期过滤器实现转换。
表格的操作列,整个对单个记录操作的各种操作入口。
<el-button icon=“el-icon-search” type=“success” circle size=“mini” @click=“showView(scope.row.id)” />
<el-button icon=“el-icon-edit” type=“primary” circle size=“mini” @click=“showEdit(scope.row.id)” />
<el-button icon=“el-icon-delete” type=“danger” circle size=“mini” @click=“showDelete(scope.row.id)” />
如果是开关操作,我们也可以结合一起展示和操作处理。
操作代码如下所示:
{{ scope.row.status==0 ? ‘正常’ : ‘停用’ }}
<el-switch
v-model=“scope.row.status”
:active-value=“0”
:inactive-value=“1”
@change=“changeStatus(scope.$index, scope.row)”
/>
另外表格数据,一般还涉及到Excel的导出操作,这个其实是采用了SheetJS的处理方式草操作XLSX的方式导出Excel的,这里引用了前人开发的Export2Excel 组件进行处理。
handleDownload() { // 导出Excel文件
this.downloadLoading = true
import(‘@/vendor/Export2Excel’).then(excel => {
const tHeader = [‘父ID’, ‘分类编码’, ‘分类名称’, ‘分类描述’, ‘分类图片封面’, ‘分类图标’, ‘排序’, ‘状态’]
const filterVal = [‘pid’, ‘categoryCode’, ‘categoryName’, ‘note’, ‘pictureUrl’, ‘icon’, ‘sortCode’, ‘status’]
const list = this.list
const data = this.formatJson(filterVal, list)
excel.export_json_to_excel({
header: tHeader,
data,
filename: ‘商品分类’,
autoWidth: true,
bookType: ‘xlsx’
})
this.downloadLoading = false
})
},
formatJson(filterVal, jsonData) {
return jsonData.map(v => filterVal.map(j => {
if (j === ‘creationTime’) {
return this.parseTime(v[j], ‘{y}-{m}-{d} {h}:{i}:{s}’)
} else {
return v[j]
}
}))
},
一般来说,Element的表格控件已经具有非常丰富的功能了,包括固定行列、展开行、懒加载数据、多级表头、排序筛选、自定义列、合计行列等操作,
如果有需要直接编辑表格数据的操作,建议可以采用第三方表格组件来实现:https://github.com/huangshuwei/vue-easytable
=========================================================================
除了常规的树列表展示内容外,我们也需要一个在下拉列表中展示树内容的界面组件。
这里又得引入一个第三方的界面组件,因此Element的Select组件不支持树列表。
GitHub地址:https://github.com/riophae/vue-treeselect
官网地址:https://vue-treeselect.js.org/
常规的界面代码如下使用:
复杂一点的使用界面代码,可以指定更多的属性设置,以及处理事件操作。
<treeselect
v-model=“value”
:options=“treedata”
:multiple=“true”
:flat=“true”
:default-expand-level=“Infinity”
:open-on-click=“true”
:open-on-focus=“true”
clearable
:max-height=“200”
/>
这里的options就是树控件的数据,是一个嵌套结构的列表对象:
options: [ {
id: ‘a’,
label: ‘a’,
children: [ {
id: ‘aa’,
label: ‘aa’,
最后
面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。
96道前端面试题:
常用算法面试题:
前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
t=“200”
/>
这里的options就是树控件的数据,是一个嵌套结构的列表对象:
options: [ {
id: ‘a’,
label: ‘a’,
children: [ {
id: ‘aa’,
label: ‘aa’,
最后
面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。
96道前端面试题:
- [外链图片转存中…(img-06waQf6a-1713587855869)]
常用算法面试题:
- [外链图片转存中…(img-miZLMoLg-1713587855869)]
前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化
- [外链图片转存中…(img-eZ0oHzLr-1713587855869)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-1Kllte53-1713587855870)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!