【ElementUI】全面掌握:一站式前端开发教程
本文总结了使用 ElementUI 与 Vue.js 构建现代网页应用的核心内容,包括组件使用、表单验证、技术整合以及测试与部署方法。
【ElementUI】全面掌握:一站式前端开发教程
文章目录
第一章:认识 ElementUI
1.1 引言:为什么选择 ElementUI?
在众多前端 UI 框架中,ElementUI 脱颖而出的原因多种多样。首先,它是专为 Vue.js 设计的,提供了与 Vue 的紧密集成,让开发者能够快速构建高效且美观的网页应用。其次,它拥有丰富的组件库和易于使用的 API,极大地提高了开发效率。此外,ElementUI 的社区活跃,持续更新,为开发者提供了强大的技术支持和丰富的学习资源。
1.2 安装与项目配置
安装 ElementUI 相对简单,可以通过 npm 或 yarn 来进行安装。首先,确保你的开发环境中已经安装了 Node.js。然后,在你的 Vue 项目中打开终端,执行以下命令:
npm install element-ui --save
# 或者
yarn add element-ui
安装完成后,你需要在项目的主文件 (通常是 main.js 或 app.js) 中引入 ElementUI 并告诉 Vue 使用它:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
这样,ElementUI 就被添加到你的项目中了,你可以开始使用它提供的各种组件来构建应用。
1.3 快速开始:第一个 ElementUI 页面
一旦 ElementUI 集成到你的 Vue 项目中,你可以立即开始使用它的组件来构建页面。下面是一个简单的示例,展示如何使用 ElementUI 创建一个带有按钮和消息提示的页面:
<template>
<div>
<el-button type="primary" @click="greet">点击我</el-button>
</div>
</template>
<script>
export default {
methods: {
greet() {
this.$message('欢迎学习 ElementUI!');
}
}
}
</script>
在这个例子中,我们使用了 组件创建了一个按钮,并绑定了一个点击事件。当按钮被点击时,会触发一个消息提示,这是通过 ElementUI 的 $message 方法实现的。
第二章:布局与基础组件
2.1 容器和布局
在 ElementUI 中,容器和布局是构建页面的基础。ElementUI 提供了 Container, Header, Aside, Main, 和 Footer 组件来帮助开发者实现经典的页面布局。这些组件配合使用,可以轻松创建具有头部、侧边栏、主内容区和底部的布局结构。例如,下面的代码创建了一个简单的页面布局:
<template>
<el-container>
<el-header>页头</el-header>
<el-container>
<el-aside width="200px">侧边栏</el-aside>
<el-main>主内容区</el-main>
</el-container>
<el-footer>页脚</el-footer>
</el-container>
</template>
这种布局方式非常适合需要清晰结构的应用,如仪表板或管理界面。
2.2 按钮和图标
按钮和图标是用户界面的基本元素,用于执行操作和增强界面指示。ElementUI 提供了多种按钮(如默认按钮、主要按钮、成功按钮等),以及丰富的图标支持,可以通过设置 type 属性来定义按钮的样式:
<template>
<div>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</div>
</template>
ElementUI 还内置了一套图标,可以通过 el-icon-* 的类名来使用,例如:
<el-button icon="el-icon-edit">编辑</el-button>
<el-button icon="el-icon-share">分享</el-button>
2.3 输入框与表单
表单是任何动态网站的重要组成部分,用于收集用户输入。ElementUI 提供了完整的表单控件,如输入框、选择器、开关、单选按钮、复选按钮等。这些表单控件不仅美观,而且具有丰富的配置选项和验证功能。下面是一个包含输入框和表单验证的例子:
<template>
<el-form :model="form" :rules="rules" ref="form">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="form.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('form')">提交</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
form: {
username: '',
password: ''
},
rules: {
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
}
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('表单验证成功');
} else {
alert('表单验证失败');
return false;
}
});
}
}
}
</script>
通过这些组件,ElementUI 简化了表单处理和验证过程,使其成为开发现代 Web 应用程序的理想选择。
第三章:数据展示组件
在 ElementUI 中,有多种组件专门用于优雅地展示复杂数据。这些组件不仅提升了用户体验,还使得数据的管理和操作更为直观和高效。
3.1 表格(Table)与数据呈现
ElementUI 的表格组件 (el-table) 是一个功能丰富的组件,用于展示结构化数据。它支持排序、筛选、自定义列、行展开和分页等功能。表格组件也允许开发者插入自定义模板以满足特定的显示需求。以下是一个基本的表格示例:
<template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '张小三',
address: '上海市普陀区金沙江路 1517 弄'
}]
}
}
}
</script>
3.2 标签页(Tabs)和折叠面板(Collapse)
为了更有效地管理和展示不同类别的内容,ElementUI 提供了标签页 (el-tabs) 和折叠面板 (el-collapse) 组件。这些组件帮助创建紧凑的用户界面,允许用户通过点击不同的标签或面板标题来显示或隐藏相关内容。例如:
<template>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="用户管理" name="first">用户管理内容</el-tab-pane>
<el-tab-pane label="配置管理" name="second">配置管理内容</el-tab-pane>
<el-tab-pane label="角色管理" name="third">角色管理内容</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
data() {
return {
activeName: 'first'
};
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
}
}
}
</script>
3.3 更多数据展示组件:卡片、时间轴、标签
ElementUI 还包括其他多种数据展示组件,如:
- 卡片(Card):用于展示信息的容器,非常适合用来展示产品或文章摘要。
- 时间轴(Timeline):适用于展示时间顺序的事件或步骤,如项目里程碑或历史时间线。
- 标签(Tag):用于标记和分类内容,可以很容易地添加到任何项目中。
这些组件提供了多样化的视觉表现和丰富的功能选项,帮助开发者构建信息丰富且界面友好的应用程序。
第四章:反馈与交互组件
ElementUI 提供了一系列组件,用于在应用中实现反馈和交互。这些组件可以增强用户体验,提供及时的反馈和指导,从而帮助用户理解应用的状态和可用的操作。
4.1 弹出框(Dialogs)与通知(Notifications)
弹出框(el-dialog)是用于展示信息或接受用户输入的模态窗口。它可以包含文本、表单或其他任意组件。下面是一个简单的弹出框示例:
<template>
<div>
<el-button @click="dialogVisible = true">打开弹窗</el-button>
<el-dialog
title="欢迎"
:visible.sync="dialogVisible"
width="30%">
<span>这是一段信息</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false
};
}
}
</script>
通知(el-notification)则用于显示不打断用户操作的提示信息。它通常用于显示应用状态的改变或者背景任务的完成情况:
<el-button @click="openNotification">打开通知</el-button>
<script>
export default {
methods: {
openNotification() {
this.$notify({
title: '成功',
message: '这是一条成功的提示消息',
type: 'success'
});
}
}
}
</script>
4.2 消息提示(Message)与消息盒子(MessageBox)
消息提示(el-message)提供了一种轻量级的反馈机制,适用于简单的操作确认信息:
<el-button @click="openMessage">显示消息</el-button>
<script>
export default {
methods: {
openMessage() {
this.$message('这是一条消息提示');
}
}
}
</script>
消息盒子(el-message-box)则是一种对话框,用于确认用户操作或获取用户决策:
<el-button @click="openMessageBox">确认操作</el-button>
<script>
export default {
methods: {
openMessageBox() {
this.$msgbox({
title: '确认',
message: '您确定要执行此操作吗?',
showCancelButton: true,
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(action => {
this.$message({
type: 'info',
message: '操作' + (action === 'confirm' ? '确认' : '取消')
});
});
}
}
}
</script>
4.3 加载指示(Loading)与进度条(Progress)
加载指示(el-loading)是一种反馈机制,用于指示正在进行的进程,而进度条(el-progress)则显示操作的完成百分比。加载指示可以应用于任何组件,而进度条则常用于长时间运行的任务:
<el-button @click="loading = true">加载中</el-button>
<el-loading :loading="loading" lock text="加载中...">
<div>内容...</div>
</el-loading>
<el-progress :percentage="50"></el-progress>
这些组件的组合使用可以提供丰富的用户交互和反馈,增强用户体验,使用户在使用应用时感到更加直观和流畅。接下来的章节将介绍 ElementUI 的导航和其他高级组件,进一步扩展你的前端开发工具箱。
第五章:高级数据处理
在复杂的前端应用中,高级数据处理是不可或缺的一部分。ElementUI 提供了多种组件,可以帮助开发者方便地实现数据的选择、展示和操作,从而提高应用的用户体验和操作效率。
5.1 级联选择器与选择组件
级联选择器(el-cascader)是一种特殊的选择器,用于处理具有层次结构的数据,如地区的省市区选择等。用户可以选择每一个级别的选项,随着每一级的选择,下一级的选项会相应更新。
<template>
<el-cascader
:options="options"
v-model="selectedOptions"
@change="handleChange"
filterable
clearable
placeholder="请选择">
</el-cascader>
</template>
<script>
export default {
data() {
return {
selectedOptions: [],
options: [
{
value: 'zhejiang',
label: '浙江',
children: [
{
value: 'hangzhou',
label: '杭州',
children: [
{ value: 'xihu', label: '西湖' },
{ value: 'binjiang', label: '滨江' }
]
}
]
},
{
value: 'jiangsu',
label: '江苏',
children: [
{
value: 'nanjing',
label: '南京',
children: [
{ value: 'zhonghuamen', label: '中华门' }
]
}
]
}
]
};
},
methods: {
handleChange(value) {
console.log(value);
}
}
}
</script>
5.2 日期和时间选择器
日期和时间选择器(el-date-picker 和 el-time-picker)允许用户选择一个日期、时间或日期时间范围,非常适用于需要预约、设置日程或记录事件的应用。
<template>
<el-date-picker
v-model="date"
type="datetime"
placeholder="选择日期时间">
</el-date-picker>
</template>
<script>
export default {
data() {
return {
date: null
};
}
}
</script>
5.3 数据分页与排序
对于数据量较大的应用,分页和排序功能是必不可少的。ElementUI 的表格组件(el-table)内置支持分页和排序,可以很容易地实现这些功能。
<template>
<el-table
:data="tableData"
style="width: 100%"
@sort-change="handleSortChange">
<el-table-column
prop="date"
label="日期"
sortable="custom">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
sortable="custom">
</el-table-column>
<el-table-column
prop="address"
label="地址">
</el-table-column>
</el-table>
<el-pagination
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
:page-size="10"
layout="total, prev, pager, next, jumper"
:total="100">
</el-pagination>
</template>
<script>
export default {
data() {
return {
tableData: [{ date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }],
currentPage: 1
};
},
methods: {
handleSortChange({ column, prop, order }) {
console.log(`当前列: ${prop}, 排序方式: ${order}`);
},
handleCurrentChange(newPage) {
console.log(`当前页: ${newPage}`);
// 这里可以进行数据的请求和更新
}
}
}
</script>
以上组件和示例展示了如何在 ElementUI 框架中处理高级数据选择、显示和操作的常见场景。通过这些工具,开发者可以构建出功能丰富且用户友好的现代web应用。
第六章:ElementUI 布局与响应式设计
在现代Web开发中,一个优秀的用户界面应该能够适应不同的屏幕尺寸和设备。ElementUI 提供了一套强大的布局和响应式设计工具,使开发者能够轻松创建灵活且美观的布局。
6.1 使用 ElementUI 响应式布局
ElementUI 的响应式布局系统基于 Flexbox 构建,通过 el-row 和 el-col 组件来实现。这些组件允许开发者定义行和列,并通过属性控制它们在不同屏幕尺寸下的表现。
<template>
<el-row>
<el-col :span="24" :xs="24" :sm="12" :md="8" :lg="6">
<div class="grid-content bg-purple-dark"></div>
</el-col>
<el-col :span="24" :xs="24" :sm="12" :md="8" :lg="6">
<div class="grid-content bg-purple"></div>
</el-col>
<el-col :span="24" :xs="24" :sm="24" :md="8" :lg="12">
<div class="grid-content bg-purple-light"></div>
</el-col>
</el-row>
</template>
<style>
.grid-content {
border-radius: 4px;
min-height: 36px;
}
.bg-purple-dark { background: #99a9bf; }
.bg-purple { background: #d3dce6; }
.bg-purple-light { background: #e5e9f2; }
</style>
6.2 栅格系统深入
ElementUI 的栅格系统允许开发者通过设置 gutter 属性在 el-row 上定义列间距,为布局中的元素提供一致的间隔。此外,el-col 支持 offset、push 和 pull 属性,这些都是调整列位置的有力工具。
<template>
<el-row gutter="20">
<el-col :span="6" :offset="6">
<div class="grid-content bg-purple"></div>
</el-col>
<el-col :span="6" :push="2">
<div class="grid-content bg-purple-light"></div>
</el-col>
</el-row>
</template>
6.3 媒体查询与自适应技巧
虽然ElementUI提供了丰富的响应式设计工具,但有时你可能还需要使用CSS媒体查询来进一步定制响应式行为。通过媒体查询,你可以为不同的设备和屏幕尺寸编写特定的CSS规则。
<style scoped>
@media (max-width: 768px) {
.special-class {
display: none;
}
}
@media (min-width: 769px) and (max-width: 992px) {
.special-class {
background-color: lightblue;
}
}
</style>
这样的媒体查询可以与 ElementUI 的栅格系统结合使用,创建出适应各种设备的界面。通过灵活使用这些工具,你可以确保你的Web应用既美观又实用,能够提供一致的用户体验无论用户使用什么设备。
中场休息ing…loading…60%
第七章:主题定制和扩展
ElementUI 提供了灵活的主题定制功能,允许开发者根据自己的品牌需求来调整组件的样式。此外,通过创建自定义组件和使用 SCSS 变量,开发者可以进一步扩展和个性化自己的应用界面。
7.1 定制 ElementUI 主题
ElementUI 允许通过修改 SCSS 变量来定制主题。开发者可以通过在线主题编辑器或直接修改源文件的方式来定制主题。在线主题编辑器是一个简便的工具,可以在不触碰代码的情况下对颜色、字体大小等进行调整。
如果需要更深层次的定制,可以通过修改 element-variables.scss 文件来实现。此文件包含了所有主题相关的变量,修改这些变量将影响所有组件的样式。
/* 修改 element-variables.scss */
$--color-primary: teal;
$--border-radius-base: 5px;
/* 引入 Element */
@import "~element-ui/packages/theme-chalk/src/index";
在项目构建时,这些变量会被应用到 ElementUI 的组件样式中,从而实现全局主题的统一。
7.2 创建自定义组件
尽管 ElementUI 提供了广泛的组件库,但有时你可能需要创建自定义组件以满足特定需求。创建自定义组件时,可以利用 Vue 的组件系统,并结合 ElementUI 的样式和行为模式。
<template>
<div class="custom-button" @click="handleClick">
<span>{{ label }}</span>
</div>
</template>
<script>
export default {
props: {
label: String
},
methods: {
handleClick() {
this.$emit('click');
}
}
}
</script>
<style scoped>
.custom-button {
padding: 10px 20px;
background-color: $--color-primary;
color: white;
border-radius: $--border-radius-base;
cursor: pointer;
user-select: none;
transition: background-color 0.3s;
&:hover {
background-color: darken($--color-primary, 10%);
}
}
</style>
7.3 使用 SCSS 变量
SCSS 变量不仅可以用于主题定制,还可以在项目中广泛使用,以保持样式的一致性和可维护性。你可以定义一组通用的变量,然后在整个项目的样式表中使用它们。
// styles/variables.scss
$font-stack: Helvetica, Arial, sans-serif;
$primary-color: #333;
// 使用变量
@import 'variables';
body {
font-family: $font-stack;
color: $primary-color;
}
通过这种方式,你可以轻松地更新和维护你的样式设置,使得后续的样式改动更加简单和高效。
第八章:与其他技术栈的整合
ElementUI 是一个非常灵活的 UI 框架,它可以方便地整合到多种现代前端技术栈中。本章节将探讨 ElementUI 如何与 Nuxt.js、TypeScript 以及 Vuex 这三个流行的技术进行整合,以提升开发效率和项目的可维护性。
8.1 ElementUI 与 Nuxt.js
Nuxt.js 是一个基于 Vue.js 的服务端渲染(SSR)框架,它为应用提供了强大的配置支持和预设的结构,使得开发通用应用变得异常简单。将 ElementUI 集成到 Nuxt.js 中,可以让你的 SSR 应用同时享受到 ElementUI 提供的丰富组件和优雅样式。
集成步骤:
- 安装 ElementUI: 在你的 Nuxt.js 项目中安装 ElementUI
npm install element-ui
- 在 Nuxt.js 中引入 ElementUI:
创建一个 plugin element-ui.js 并在其中引入 ElementUI 和相应的 CSS 文件。
// plugins/element-ui.js
import Vue from 'vue';
import Element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(Element);
- 配置 Nuxt.js 以使用该插件:
在 nuxt.config.js 文件中,添加 element-ui.js 插件。
// nuxt.config.js
export default {
plugins: [
'@/plugins/element-ui'
]
};
通过这种方式,你可以在任何 Nuxt.js 组件中直接使用 ElementUI 组件,而无需任何额外的引入。
8.2 ElementUI 与 TypeScript
TypeScript 提供了静态类型检查,这使得开发大型应用更加安全和可维护。ElementUI 虽然是用 JavaScript 编写的,但它可以通过其社区维护的类型声明文件(@types/element-ui),与 TypeScript 良好地集成。
集成步骤:
- 安装类型声明文件:
npm install @types/element-ui --save-dev
- 在 TypeScript 项目中使用 ElementUI:
你可以像在 JavaScript 项目中一样引入并使用 ElementUI,TypeScript 的类型系统会自动应用已安装的类型声明。
8.3 使用 Vuex 管理状态
Vuex 是 Vue.js 应用的状态管理模式和库。它可以用于管理复杂组件树的状态,与 ElementUI 结合使用时,可以非常方便地在多个组件之间共享状态。
示例用法:
- 设置 Vuex Store:
// store/index.js
export const state = () => ({
cart: []
});
export const mutations = {
addToCart(state, product) {
state.cart.push(product);
}
};
- 在 ElementUI 组件中使用 Vuex 状态:
<template>
<el-button @click="addToCart(product)">Add to Cart</el-button>
</template>
<script>
import { mapMutations } from 'vuex';
export default {
methods: {
...mapMutations([
'addToCart'
]),
product() {
// product logic
}
}
}
</script>
这样,你就可以在 ElementUI 组件中方便地使用 Vuex 来管理和操作状态了。
第九章:测试与部署
在现代应用开发中,测试和部署是确保软件质量和业务连续性的关键步骤。本章节将探讨如何为使用 ElementUI 的 Vue.js 应用实施有效的单元测试和端到端测试,并介绍其部署与持续集成的最佳实践。
9.1 单元测试
单元测试是测试应用中独立单元(如函数、组件)行为的过程。对于 Vue.js 和 ElementUI 组件,常用的单元测试框架包括 Jest 和 Vue Test Utils。
设置 Jest:
- 安装依赖:
npm install --save-dev jest vue-jest babel-jest @vue/test-utils
- 配置 Jest:
在项目根目录创建 jest.config.js:
module.exports = {
moduleFileExtensions: ['js', 'json', 'vue'],
transform: {
'^.+\\.vue$': 'vue-jest',
'^.+\\.js$': 'babel-jest'
},
testMatch: [
'**/tests/unit/**/*.spec.js'
]
};
编写测试用例:
对 ElementUI 组件进行单元测试需要确保你的测试覆盖了用户交互和数据处理逻辑。
// tests/unit/MyComponent.spec.js
import { shallowMount } from '@vue/test-utils';
import MyComponent from '@/components/MyComponent.vue';
describe('MyComponent', () => {
test('renders correctly', () => {
const wrapper = shallowMount(MyComponent);
expect(wrapper.text()).toContain('Some content');
});
test('button click should increment the count', async () => {
const wrapper = shallowMount(MyComponent);
await wrapper.find('button').trigger('click');
expect(wrapper.vm.count).toBe(1);
});
});
9.2 端到端测试
端到端测试模拟用户操作以测试应用的整体流程,通常使用 Cypress 或 TestCafe。
设置 Cypress:
- 安装 Cypress:
npm install cypress --save-dev
- 编写测试脚本:
在 cypress/integration 目录中添加测试文件:
// cypress/integration/app_spec.js
describe('The Home Page', () => {
it('successfully loads', () => {
cy.visit('/');
cy.contains('Welcome to Your Vue.js App');
cy.get('.hello').should('exist');
});
});
9.3 部署与持续集成
持续集成 (CI) 和持续部署 (CD) 是现代开发流程中重要的环节,可以确保代码的健康状态和快速反馈。
使用 GitHub Actions 进行 CI/CD:
- 创建 GitHub Actions 工作流:
在项目的 .github/workflows 目录中创建一个新的工作流文件,例如 ci.yml:
name: Continuous Integration and Deployment
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm run test
- name: Build
run: npm run build
- name: Deploy
run: echo "Deploying to production"
- 配置部署脚本:
根据你的部署环境(如 AWS, Azure, Firebase)配置部署步骤。确保你的部署密钥安全地存储在 GitHub Secrets 中。
通过这些步骤,你可以确保应用在每次提交时都自动进行构建和测试,而且当代码变化推送到主分支时,自动部署到生产环境。
结语
经过本文的学习,我们对 ElementUI 进行了全面的探索,了解了其与现代前端技术栈的整合,以及如何有效地进行测试和部署。这一章节将作为本文的结语。
总结
在本文中,我们从 ElementUI 的基础使用开始,逐步深入到与 Vue.js 的高级集成技术,探讨了如何在不同的前端项目中利用 ElementUI:
- 基础与组件: 我们学习了 ElementUI 的核心组件和布局系统,这为构建响应式和功能丰富的用户界面打下了基础。
- 表单处理与验证: 详细讨论了如何使用 ElementUI 进行表单创建和复杂验证,确保用户输入的有效性和一致性。
- 与其他技术栈的整合: 介绍了 ElementUI 如何与 Nuxt.js、TypeScript 和 Vuex 等现代技术栈配合使用,以提升开发效率和项目的可维护性。
- 测试与部署: 我们探讨了如何对使用 ElementUI 的应用进行单元测试和端到端测试,并讨论了持续集成和持续部署的策略,确保应用的质量和可靠性。
更多爪爪资源:
导航栏(实时更新):⭐爪磕学习资源笔记记录⭐
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)