学习目标
- 8.1 ElementUI 简介
- 8.1.1 什么是 ElementUI
- 8.1.2 为什么使用 ElementUI
- 8.1.3 普通项目使用 ElementUI
- 8.2 脚手架安装使用 ElementUI
- 8.2.1 安装 ElementUI
- 8.2.2 组件完全引入
- 8.2.3 组件按需引入
- 8.3 ElementUI 常用组件
- 8.3.1 Layout 布局
- 8.3.2 Card 卡片
- 8.3.3 Notification 通知
- 8.3.4 Message 消息提示
- 8.3.5 Form 表单
- 8.4 布局后台首页
- 8.4.1 Container 容器
- 8.4.2 NavMenu 导航菜单
- 8.4.3 Header 头部布局
(如果没有了解前面的知识可以去我主页看看 第四-七章的内容来学习)学习了组件之后,我们能够封装很多实用的组件用于项目开发中,但是随着项目的庞大,要求的界面效果越来越精致。所有的组件都由自己开发耗时耗力,甚至有些组件其他团队已经开发并开源了,学习使用的成本远低于自己开发,为了避免重复造轮子,我们需要学习一些主流的组件库,其中 ElementUI 就是企业中使用率非常高的 Vue 组件库。
8.1 ElementUI 简介
8.1.1 什么是 ElementUI
ElementUI是一款基于Vue.js的桌面端UI组件库,由饿了么前端团队开发和维护。它提供了丰富的UI组件和交互效果,使得开发者能够快速构建出美观、功能强大的Web应用程序。以下是对ElementUI的详细介绍:
一、特点
- 丰富的组件库:ElementUI提供了诸如按钮、表格、表单、弹窗等常用的UI组件,这些组件都经过精心设计和开发,具有统一的风格和交互方式,使得应用程序的界面一致性和用户体验得到了保证。
- 灵活的定制能力:ElementUI提供了丰富的主题和样式配置选项,开发者可以根据自己的需求定制组件的外观和交互效果。
- 详细的文档和社区支持:ElementUI的官方文档详细地介绍了每个组件的使用方法和参数配置,开发者可以轻松地查阅文档并快速上手。此外,ElementUI拥有一个活跃的社区,开发者可以在社区中交流经验、解决问题。
- 活跃的更新和维护:作为一个开源项目,ElementUI在GitHub上有大量的贡献者和维护者,他们不断修复bug、添加新功能和改进用户体验。
二、应用场景
ElementUI广泛应用于各种Web应用开发场景,尤其是在企业级应用、数据可视化和电商平台中表现尤为突出。具体来说,它适用于以下场景:
- 企业级Web应用:如CRM(客户关系管理系统)、ERP(企业资源计划系统)和OA(办公自动化系统)等。通过其强大的表格组件和表单功能,开发者可以快速构建数据密集型的界面。
- 数据可视化平台:通过与Vue的图表插件(如ECharts)结合,ElementUI可以用于构建数据分析和展示平台。
- 电子商务平台:电商网站通常需要处理复杂的交互和数据展示,ElementUI提供了一整套适合电商平台的组件。
- 内容管理系统(CMS):ElementUI的灵活布局和高效组件让开发者能够快速搭建内容发布和管理系统。
三、优势
- 提高开发效率:ElementUI提供了丰富的UI组件和交互效果,开发者可以直接使用这些组件来构建应用程序,而无需从头开始编写代码。这大大提高了开发效率,缩短了开发周期。
- 保证用户体验:ElementUI的组件都经过精心设计和开发,具有统一的风格和交互方式。这使得应用程序的界面一致性和用户体验得到了保证。
- 易于上手和定制:ElementUI的官方文档详细且易于理解,开发者可以快速上手。同时,它提供了丰富的主题和样式配置选项,开发者可以根据自己的需求进行定制。
综上所述,ElementUI是一款功能强大、易于上手和定制的Vue.js桌面端UI组件库。它提供了丰富的UI组件和交互效果,使得开发者能够快速构建出美观、功能强大的Web应用程序。
8.1.2 为什么使用 ElementUI
使用ElementUI有多个原因,这些原因主要围绕提高开发效率、保证用户体验、以及利用社区和生态系统的优势。以下是一些具体的理由:
- 丰富的组件库:
- ElementUI提供了一套完整且经过精心设计的UI组件,这些组件覆盖了大多数Web应用所需的交互元素,如按钮、表单、对话框、表格等。
- 使用这些现成的组件可以大大加快开发速度,减少从头编写和调试UI代码的时间。
- 一致的用户体验:
- ElementUI的组件遵循统一的设计风格和交互模式,这有助于确保应用界面的一致性和连贯性。
- 一致的用户体验可以提高用户的满意度和忠诚度,因为他们能够轻松地在应用的不同部分之间导航和操作。
- 易于定制:
- ElementUI提供了丰富的主题和样式配置选项,允许开发者根据自己的品牌或项目需求进行定制。
- 定制功能使得ElementUI能够适应不同的设计风格和品牌要求,同时保持组件的功能性和易用性。
- 良好的文档和社区支持:
- ElementUI的官方文档详细且易于理解,提供了关于每个组件的使用方法和参数配置的详细信息。
- 有一个活跃的社区围绕ElementUI,开发者可以在其中寻求帮助、分享经验,并获取关于最佳实践和性能优化的建议。
- 活跃的更新和维护:
- ElementUI是一个持续维护和更新的项目,这意味着它可以及时修复已知的问题、添加新功能和改进性能。
- 持续的更新和维护保证了ElementUI的可靠性和稳定性,以及与现代Web技术栈的兼容性。
- 与Vue.js的集成:
- ElementUI是为Vue.js量身定制的,因此它与Vue.js的集成非常紧密和流畅。
- 使用ElementUI可以充分利用Vue.js的响应式数据绑定、组件化架构和虚拟DOM等特性,从而构建出高效、可维护的Web应用。
- 生态系统优势:
- ElementUI作为Vue.js生态系统的一部分,可以与其他Vue.js相关的库和工具(如Vue Router、Vuex等)无缝集成。
- 这种集成性使得开发者可以构建一个完整且功能强大的Vue.js应用,而无需担心组件之间的兼容性问题。
综上所述,使用ElementUI可以显著提高开发效率、保证用户体验、并利用社区和生态系统的优势。这些优势使得ElementUI成为许多Vue.js开发者的首选UI组件库。
8.1.3 普通项目使用 ElementUI
普通项目中使用ElementUI是一个很好的选择,特别是当你希望快速搭建一个具有一致用户体验和丰富交互功能的Web应用时。ElementUI作为Vue.js的UI组件库,提供了大量预构建的组件,这些组件可以帮助你节省开发时间,同时确保应用的美观和易用性。
以下是在普通项目中使用ElementUI的一些步骤和建议:
1. 安装ElementUI
首先,你需要在你的Vue.js项目中安装ElementUI。你可以使用npm或yarn来安装:
npm install element-ui --save
# 或者
yarn add element-ui
2. 引入ElementUI
在你的Vue.js项目的入口文件(通常是main.js或main.ts)中引入ElementUI和它的样式:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);
3. 使用ElementUI组件
现在,你可以在你的Vue组件中自由地使用ElementUI提供的组件了。例如,你可以使用来创建一个按钮,或者使用来创建一个表格。
<template><div><el-button type="primary">主要按钮</el-button><el-table :data="tableData"><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></div>
</template><script>
export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄'}]};}
};
</script>
4. 定制和扩展
ElementUI提供了丰富的定制选项,你可以通过修改主题变量、使用Scoped Slots等方式来定制组件的样式和行为。此外,你还可以基于ElementUI的组件创建自己的自定义组件,以满足项目的特定需求。
5. 注意性能优化
虽然ElementUI提供了很多方便的组件,但在使用它们时也要注意性能优化。例如,对于大型表格数据,你可以使用分页或虚拟滚动等技术来减少渲染时间和内存占用。
6. 遵循最佳实践
最后,记得遵循Vue.js和ElementUI的最佳实践,如组件化开发、数据驱动视图、避免不必要的DOM操作等。这将有助于你构建一个高效、可维护的Web应用。
总之,ElementUI是一个强大的Vue.js UI组件库,它可以帮助你快速搭建一个具有丰富功能和一致用户体验的Web应用。在普通项目中使用ElementUI是一个明智的选择,但也要注意性能优化和遵循最佳实践。
8.2 脚手架安装使用 ElementUI
8.2.1 安装 ElementUI
安装ElementUI是一个相对简单的过程,以下是在Vue.js项目中安装ElementUI的详细步骤:
一、确保项目环境准备
- Node.js和npm:
- 确保你的电脑上已经安装了Node.js和npm(Node Package Manager)。
- 可以通过在终端或命令提示符中输入node -v和npm -v来检查它们是否已安装,并查看安装的版本号。
- 如果没有安装,请前往Node.js官网下载并安装Node.js,npm会随Node.js一起安装。
- Vue.js项目:
- 确保你已经创建了一个Vue.js项目。如果还没有,可以使用Vue CLI创建一个新的项目。
- 使用命令npm install -g @vue/cli全局安装Vue CLI(如果尚未安装)。
- 使用命令vue create my-project创建一个新的Vue项目(my-project是项目名称,可以根据需要更改)。
- 进入项目目录,使用命令cd my-project。
二、安装ElementUI
- 使用npm安装:
- 在项目根目录下打开终端或命令提示符。
- 输入命令npm install element-ui --save来安装ElementUI,并将其添加到项目的依赖项中。
- –save选项会将ElementUI添加到package.json文件的dependencies部分。
- 使用yarn安装(如果你使用yarn作为包管理器):
- 输入命令yarn add element-ui来安装ElementUI。
三、引入ElementUI
-
在入口文件中引入:
- 打开你的Vue项目的入口文件(通常是main.js或main.ts)。
- 添加以下代码来引入ElementUI的样式和组件:
import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI);
-
在Vue组件中使用ElementUI组件:
- 现在你可以在你的Vue组件中使用ElementUI提供的组件了。例如,在App.vue中使用一个按钮组件:
<template><div id="app"><el-button type="primary">主要按钮</el-button></div> </template> <script> export default {name: 'App' } </script>
四、验证安装是否成功
- 检查node_modules文件夹:
- 在你的项目文件夹中,应该有一个node_modules文件夹,里面包含了所有通过npm安装的依赖项。
- 你可以在这个文件夹中找到element-ui文件夹,这表示ElementUI已经被成功安装。
- 检查package.json文件:
- 打开你的项目的package.json文件。
- 你应该能在dependencies部分看到element-ui及其版本号。
- 运行项目并查看效果:
- 使用命令npm run serve或yarn serve来运行你的Vue项目。
- 打开浏览器并访问项目地址(通常是http://localhost:8080),你应该能看到ElementUI的组件在你的应用中正确显示。
通过以上步骤,你就成功地在Vue.js项目中安装了ElementUI,并可以开始使用它提供的各种组件了。
8.2.2 组件完全引入
在Vue.js项目中,当你决定使用ElementUI时,你可以选择完全引入组件库,这意味着你将引入ElementUI提供的所有组件和样式。这种方法适用于大多数项目,特别是当你需要使用ElementUI的多个组件时,因为它简化了组件的引入过程。
以下是完全引入ElementUI的步骤:
- 安装ElementUI:
首先,你需要通过npm或yarn安装ElementUI。如果你还没有安装,可以使用以下命令之一:
npm install element-ui --save
# 或者
yarn add element-ui
- 引入ElementUI:
在你的Vue项目的入口文件(通常是main.js或main.ts)中,你需要引入ElementUI的组件和样式。你可以通过以下代码来实现:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);
这段代码做了以下几件事:
- 从element-ui包中引入了ElementUI的Vue插件。
- 从element-ui/lib/theme-chalk/index.css中引入了ElementUI的默认样式(Chalk主题)。
- 使用Vue.use(ElementUI)将ElementUI插件注册到Vue实例中。
- 使用ElementUI组件:
现在,你可以在你的Vue组件中自由地使用ElementUI提供的任何组件了。只需在你的模板部分添加相应的ElementUI组件标签即可。 - 确保按需加载(可选):
虽然你选择了完全引入ElementUI,但值得注意的是,对于大型项目或希望优化性能的项目,按需加载组件可能是一个更好的选择。按需加载意味着你只会引入项目中实际使用的组件,从而减小打包后的文件大小。然而,这要求你使用Babel插件或Webpack的loader来自动处理组件的引入。
如果你决定稍后采用按需加载,你可以通过安装babel-plugin-component或使用Vue CLI的插件(如vue-cli-plugin-element)来实现。 - 验证安装:
最后,运行你的Vue项目,并检查ElementUI的组件是否按预期工作。你可以通过查看控制台是否有错误消息,以及组件是否按预期渲染到页面上来进行验证。
记住,完全引入ElementUI是一种方便但可能不是最优化的方法,特别是当你的项目只需要ElementUI中的少数几个组件时。在这种情况下,考虑使用按需加载来提高性能和减小打包后的文件大小。
8.2.3 组件按需引入
在Vue.js项目中,ElementUI的按需引入是一种优化手段,旨在只引入项目中实际使用的组件,从而减小打包后的文件体积,提高加载速度。以下是按需引入ElementUI的详细步骤:
一、安装必要的依赖
- 安装ElementUI:
首先,你需要在项目中安装ElementUI。如果尚未安装,可以使用npm或yarn进行安装:
npm install element-ui --save
# 或者
yarn add element-ui
- 安装babel-plugin-component:
为了支持按需引入,你需要安装babel-plugin-component插件。这个插件可以帮助你按需引入ElementUI的组件,并自动处理相关的样式文件:
npm install babel-plugin-component --save-dev
# 或者
yarn add babel-plugin-component --dev
二、配置Babel
- 修改.babelrc文件:
如果你的项目根目录下有一个.babelrc文件,你需要在这个文件中添加babel-plugin-component插件的配置。配置内容如下:
{"presets": ["@babel/preset-env"],"plugins": [["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}]]
}
如果你的项目使用的是babel.config.js文件,则需要在该文件中进行类似的配置。
- 确保Babel被Webpack支持:
确保你的Webpack配置文件(通常是webpack.config.js)中包含了Babel loader的配置,以便Webpack能够处理JavaScript文件并使用Babel进行转译。
三、按需引入组件
- 在Vue组件中引入需要的组件:
现在,你可以在你的Vue组件中按需引入ElementUI的组件了。例如,如果你只需要使用Button和Select组件,你可以这样引入:
import Vue from 'vue';
import { Button, Select } from 'element-ui';Vue.component(Button.name, Button);
Vue.component(Select.name, Select);
或者,你也可以使用ES6的解构赋值和重命名功能来简化代码:
import { Button as ElButton, Select as ElSelect } from 'element-ui';Vue.component('el-button', ElButton);
Vue.component('el-select', ElSelect);
- 在模板中使用组件:
引入组件后,你就可以在你的Vue组件的模板部分使用这些组件了。例如:
<template><div><el-button type="primary">主要按钮</el-button><el-select v-model="selectedValue" placeholder="请选择"><el-option label="选项一" value="1"></el-option><el-option label="选项二" value="2"></el-option></el-select></div>
</template><script>
export default {data() {return {selectedValue: ''};}
};
</script>
四、验证和优化
- 验证按需引入是否成功:
运行你的Vue项目,并检查是否只有引入的组件被加载到页面中。你可以通过查看浏览器的开发者工具中的网络请求来验证这一点。 - 优化打包体积:
使用Webpack Bundle Analyzer等工具来分析打包后的文件体积,并找出可以进一步优化的部分。例如,你可以考虑移除未使用的组件或样式,或者进一步优化Webpack的配置来减小打包体积。
通过按需引入ElementUI的组件,你可以有效地减小打包后的文件体积,提高页面的加载速度,并优化用户的体验。同时,这也使得你的代码结构更加清晰,便于后期的维护和升级。
8.3 ElementUI 常用组件
8.3.1 Layout 布局
ElementUI的Layout布局主要用于页面的整体布局,可以创建复杂的页面结构。以下是对Layout布局的详细介绍:
一、基本概念
Layout布局组件基于flex布局实现,可以方便地实现页面的响应式布局、对齐方式调整等功能。它通常包含行(Row)和列(Col)两个基本概念,通过组合这两个概念,可以构建出各种复杂的页面布局。
二、常用组件
ElementUI的Layout布局中常用的组件包括:
<el-container>
:布局容器,用于包含其他布局组件。<el-header>
:顶栏容器,通常用于放置页面的导航栏、标题等信息。<el-aside>
:侧边栏容器,通常用于放置页面的侧边菜单或目录。<el-main>
:主要区域容器,用于放置页面的主要内容。<el-footer>
:底栏容器,通常用于放置页面的版权信息或底部菜单。<el-row>
:行容器,用于包含列组件,并设置行的布局属性(如对齐方式、间距等)。<el-col>
:列组件,用于设置列的宽度和偏移量等属性。
三、使用示例
以下是一个简单的ElementUI Layout布局示例代码:
<template><el-container><el-header>Header</el-header><el-container><el-aside width="200px">Aside</el-aside><el-main>Main Content</el-main></el-container><el-footer>Footer</el-footer></el-container>
</template><script>
export default {name: 'SimpleLayout'
}
</script><style scoped>
/* 添加一些简单的样式,以便更好地展示布局效果 */
.el-header, .el-footer {background-color: #b3c0d1;color: #333;text-align: center;padding: 20px 0;
}
.el-aside {background-color: #d3dce6;color: #333;text-align: center;line-height: 200px;
}
.el-main {background-color: #e9eef3;color: #333;text-align: center;line-height: 200px;
}
</style>
四、行与列的属性
- 行属性:
- gutter:栅格间隔,单位px,左右栅格间隔之和。
- 列属性:
- span:栅格占据的列数,默认为24。
- offset:栅格左侧的间隔格数,默认为0。
五、高级配置
- 混合布局:通过基础的1/24分栏任意扩展组合形成较为复杂的混合布局。
- 分栏偏移:通过制定col组件的offset属性可以指定分栏偏移的栏数。
- 对齐方式:通过flex布局来对分栏进行灵活的对齐。将type属性赋值为flex,可以启用flex布局,并可通过justify属性来指定start、center、end、space-between、space-around等值来定义子元素的排版方式。
六、使用步骤
要在项目中使用ElementUI并实现Layout布局,可以按照以下步骤进行:
- 使用npm或yarn安装ElementUI。例如,使用npm安装的命令如下:
npm install element-ui --save
- 在你的Vue项目中引入ElementUI。通常可以在main.js文件中进行引入和全局注册:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);
- 在你的Vue组件中使用Layout布局组件,如前面提供的示例代码所示。你可以根据需要调整布局组件的属性和样式,以实现所需的页面布局效果。
通过以上步骤,你就可以在项目中使用ElementUI并实现Layout布局了。
8.3.2 Card 卡片
ElementUI中的Card卡片组件主要用于信息聚合展示,它提供了一个容器,用于包裹和展示相关信息。以下是对Card卡片组件的详细介绍:
一、基本属性
- header:卡片头部内容,支持字符串或渲染函数,也支持使用插槽(slot)进行自定义。
- body-style:卡片内容区的自定义样式,可以通过此属性设置内边距、背景色等样式。
- shadow:是否显示阴影,可选值包括always(始终显示)、hover(鼠标悬浮时显示)、never(从不显示)。
二、Vue 2中的Element UI Card
在Vue 2中,Element UI的Card组件通常不直接提供事件,因为它主要是用于展示信息的静态组件。Card组件也不直接提供方法供外部调用,主要通过属性和插槽进行交互。
三、Vue 3中的Element Plus Card
在Vue 3中,Element Plus的Card组件与Vue 2中的Element UI Card组件类似,但有一些小的差异:
- border:是否显示边框,默认为true。这是一个在Vue 3的Element Plus Card中新增的属性。
- 使用Composition API:在Vue 3中,你可以使用Composition API(如setup函数和ref函数)来定义响应式数据,这与Vue 2中的Options API有所不同。但请注意,对于简单的用例,你仍然可以使用Vue 3的Options API(类似于Vue 2的方式),这取决于你的个人偏好和项目需求。
四、示例代码
以下是一个Vue 2中使用Element UI Card的示例代码:
<template><el-card :header="headerText" body-style="padding: 20px;" :shadow="shadowType"><p>卡片内容...</p></el-card>
</template><script>
export default {data() {return {headerText: '卡片标题',shadowType: 'always' // 可以改为 'hover' 或 'never'};}
};
</script>
以下是一个Vue 3中使用Element Plus Card的示例代码:
<template><el-card header="卡片标题" :body-style="{ padding: '20px' }" :shadow="shadowType" :border="true"><p>卡片内容...</p></el-card>
</template><script>
import { ref } from 'vue';export default {setup() {const shadowType = ref('always'); // 可以根据需要修改为 'hover' 或 'never'return { shadowType };}
};
</script>
五、注意事项
- Card组件主要是用于展示信息的,因此它通常不提供复杂的事件或方法供外部调用。如果你需要在卡片上执行一些操作,你可能需要将这些操作放在卡片内部的子组件或按钮上,并通过它们来触发事件或方法。
- 在使用Card组件时,你可以通过自定义插槽来灵活地定义卡片头部和内容区的结构。
综上所述,ElementUI中的Card卡片组件是一个简单而强大的组件,它可以帮助你轻松地创建信息聚合展示的容器。无论是Vue 2还是Vue 3,你都可以方便地使用它来实现所需的页面布局和效果。
8.3.3 Notification 通知
ElementUI中的Notification通知组件主要用于在页面中展示全局的通知提醒消息。以下是对Notification通知组件的详细介绍:
一、基本用法
- 引入组件:在使用Notification通知组件之前,首先需要在项目中引入ElementUI的依赖,并在需要使用Notification组件的地方引入该组件。
- 展示通知:使用Notification方法或this.$notify方法(在Vue实例中)来展示通知消息。可以传入一个配置对象来指定通知的标题(title)、消息内容(message)、类型(type,如success、warning、info、error等)、显示时间(duration,单位为毫秒,默认值为4500毫秒,设置为0则不会自动关闭)等属性。
二、常用配置选项
除了基本用法中的属性外,Notification通知组件还提供了一些常用的配置选项,用于灵活地定制通知消息的样式和行为:
- position:指定通知消息显示的位置,默认为bottom-right。可以根据实际需求将通知消息显示在不同的位置,如top-right、top-left、bottom-left等。
- offset:指定通知消息显示的偏移量,可以同时指定水平和垂直方向的偏移量。
- closeButton:是否显示关闭按钮,默认为true。如果设置为false,则通知消息不会自动关闭,除非设置duration为0并手动关闭或用户点击其他方式关闭(如点击通知外部区域)。
- onClose:关闭时的回调函数。当通知消息关闭时(无论是自动关闭还是用户手动关闭),都会触发该回调函数。
- dangerouslyUseHTMLString:是否允许message属性传入HTML字符串。默认为false。如果设置为true,则可以传入HTML字符串作为消息内容,但需要注意防止XSS攻击。
- customClass:自定义类名。可以为通知消息添加一个或多个自定义的CSS类名,以便进行样式定制。
三、高级用法
- 自定义HTML内容:通过dangerouslyUseHTMLString属性,可以传入HTML字符串作为消息内容。但需要注意,这样做可能会带来XSS攻击的风险,因此要确保传入的HTML字符串是可信的。另外,也可以使用VNode来创建更复杂的HTML结构,并绑定事件。
- 自定义按钮和事件:可以在消息内容中添加自定义的按钮,并为这些按钮绑定点击事件。例如,可以添加一个“确定”按钮,并在用户点击该按钮时执行一些操作(如关闭通知消息)。
- 全局配置:ElementUI允许对Notification通知组件进行全局配置。可以在引入ElementUI后,通过修改Notification.config对象来设置全局的默认属性(如position、duration等)。
四、注意事项
- 避免滥用:虽然Notification通知组件可以提供很好的用户反馈效果,但过多的通知消息可能会干扰用户的操作。因此,在使用时要合理设置通知消息的显示时间和位置,避免滥用。
- 安全性:当使用dangerouslyUseHTMLString属性传入HTML字符串时,要确保字符串内容是可信的,以防止XSS攻击。
- 样式定制:可以通过自定义类名(customClass)和CSS样式来定制通知消息的外观。但需要注意,由于通知消息是全局的,因此样式定义应该放在全局的CSS文件中,而不是组件的局部样式中。
综上所述,ElementUI中的Notification通知组件是一个功能强大且灵活的通知系统,可以帮助开发者在页面中展示各种类型的通知消息,并提供良好的用户反馈效果。在使用时,需要合理设置配置选项和注意安全性问题,以便实现最佳的用户体验。
8.3.4 Message 消息提示
ElementUI中的Message消息提示组件主要用于向用户展示操作后的反馈信息,如提交表单后的成功或失败提示。以下是对Message消息提示组件的详细介绍:
一、基本用法
- 引入组件:在使用Message消息提示组件之前,需要先引入ElementUI库,并在Vue实例中注册ElementUI组件库。
- 调用方式:通过this.$message方法(在Vue实例中)来调用Message消息提示组件。可以传入一个字符串作为简单的消息提示,也可以传入一个配置对象来自定义消息提示的样式和行为。
二、常用配置选项
Message消息提示组件提供了多个配置选项,用于灵活地定制消息提示的样式和行为:
- message:消息提示的内容,可以是字符串或VNode。
- type:消息提示的类型,可选值包括success、warning、info、error等,默认为info。不同类型的消息提示会有不同的样式和图标。
- duration:消息提示显示的时长(毫秒),默认为3000毫秒。设置为0则不会自动关闭,需要用户手动关闭(如果开启了关闭按钮)。
- showClose:是否显示关闭按钮,默认为false。如果设置为true,则会在消息提示的右上角显示一个关闭按钮,用户可以点击该按钮来关闭消息提示。
- center:是否让消息提示的文字水平居中,默认为false。如果设置为true,则消息提示的文字会在水平方向上居中显示。
- position:消息提示的位置,可以设置为页面顶部、底部等位置。但需要注意的是,ElementUI的Message组件默认是垂直方向上居中的,并且通常出现在页面的顶部或靠近顶部的位置。如果需要自定义位置,可能需要通过CSS样式来实现。
- onClose:关闭时的回调函数。当消息提示关闭时(无论是自动关闭还是用户手动关闭),都会触发该回调函数。
- customClass:自定义类名。可以为消息提示添加一个或多个自定义的CSS类名,以便进行样式定制。
三、高级用法
- Promise接口:Message组件的调用返回了一个Promise对象,因此可以使用.then和.catch方法来处理异步操作的结果。例如,在提交表单后,可以使用Message组件来显示操作结果,并根据结果执行不同的操作。
- 全局方法:ElementUI为Message组件的各种类型注册了全局方法,如this. m e s s a g e . s u c c e s s 、 t h i s . message.success、this. message.success、this.message.warning、this. m e s s a g e . i n f o 、 t h i s . message.info、this. message.info、this.message.error等。这些方法允许在不传入type字段的情况下直接显示不同状态的消息提示。
- 嵌套使用:可以在一个消息提示中嵌套另一个消息提示,但需要注意避免过度嵌套导致界面混乱。
四、注意事项
- 避免滥用:虽然Message消息提示组件可以提供很好的用户反馈效果,但过多的消息提示可能会干扰用户的操作。因此,在使用时要合理设置消息提示的显示时间和内容,避免滥用。
- 样式定制:可以通过自定义类名(customClass)和CSS样式来定制消息提示的外观。但需要注意,由于消息提示是全局的,因此样式定义应该放在全局的CSS文件中,而不是组件的局部样式中。
- 异步操作:在使用Message组件来处理异步操作的结果时,要确保异步操作已经正确完成,并根据操作结果来显示相应的消息提示。
综上所述,ElementUI中的Message消息提示组件是一个功能强大且灵活的用户反馈系统,可以帮助开发者在页面中展示各种类型的消息提示,并提供良好的用户体验。在使用时,需要合理设置配置选项和注意样式定制、异步操作等问题,以便实现最佳的用户反馈效果。
8.3.5 Form 表单
ElementUI中的Form表单组件是用于创建和管理表单的,它提供了丰富的表单控件和验证功能,方便开发者快速构建复杂的表单界面。以下是对ElementUI Form表单组件的详细介绍:
一、基本使用
- 引入组件:在使用Form表单组件之前,需要先引入ElementUI库,并在Vue实例中注册ElementUI组件库。
- 表单结构:Form表单由
<el-form>
组件和多个<el-form-item>
组件组成。<el-form>
组件是表单的容器,而<el-form-item>
组件则代表表单中的每一项。 - 数据绑定:通过v-model指令将表单控件与Vue实例中的数据进行绑定,实现数据的双向通信。
二、表单控件
ElementUI的Form表单组件支持多种表单控件,包括但不限于:
- 输入框(
<el-input>
):用于输入文本或数字。 - 选择器(
<el-select>
):用于从多个选项中选择一个或多个值。 - 单选框(
<el-radio>
):用于表示一组互斥的选项中的一个。 - 多选框(
<el-checkbox>
):用于表示一组可多选的选项。 - 开关(
<el-switch>
):用于表示两种状态的切换。 - 日期选择器(
<el-date-picker>
):用于选择日期。 - 时间选择器(
<el-time-picker>
):用于选择时间。
三、表单验证
ElementUI的Form表单组件提供了强大的验证功能,可以方便地对表单中的数据进行校验。
- 定义验证规则:在Vue实例的data函数中,定义一个rules对象,用于存储表单项的验证规则。每个表单项对应一个属性名,该属性名的值是一个数组,数组中的每个元素都是一个验证规则对象。
- 绑定验证规则:将rules对象绑定到组件的rules属性上。同时,在每个组件上,通过prop属性指定要验证的表单项。
- 触发验证:当表单项的值发生变化时,会自动触发验证。此外,还可以通过调用组件的validate方法来手动触发验证。
四、表单布局
ElementUI的Form表单组件支持多种布局方式,包括:
- 行内表单:通过设置
<el-form>
组件的inline属性为true,可以将表单项排列成一行。 - 标签位置:通过设置
<el-form>
组件的label-position属性,可以指定标签的位置(left、right、top)。 - 标签宽度:通过设置
<el-form>
组件的label-width属性,可以指定标签的宽度(如120px)。
五、高级用法
- 自定义验证规则:除了内置的验证规则外,ElementUI还支持自定义验证规则。可以通过在验证规则对象中添加validator函数来实现自定义验证逻辑。
- 重置表单:可以通过调用
<el-form>
组件的resetFields方法来重置表单,将所有表单项的值恢复到初始状态。 - 表单提交:在
<el-form>
组件上监听submit事件,或者在表单项中添加提交按钮,并在按钮的点击事件处理函数中调用表单的提交逻辑。
六、注意事项
- 合理设置验证规则:在设置验证规则时,要确保规则合理且易于理解,避免给用户带来困惑。
- 注意表单项的命名:要确保表单项的命名与后端接口中的属性名一致,以便正确地提交数据。
- 避免滥用表单验证:虽然表单验证可以提高数据的准确性,但过多的验证规则可能会降低用户体验。因此,在使用时要合理设置验证规则的数量和复杂度。
综上所述,ElementUI的Form表单组件是一个功能强大且灵活的表单构建工具,可以帮助开发者快速构建复杂的表单界面,并提供丰富的验证功能和布局选项。在使用时,需要合理设置验证规则、注意表单项的命名和布局方式等问题,以便实现最佳的表单体验。
8.4 布局后台首页
8.4.1 Container 容器
ElementUI中的Container容器组件是一个用于布局的容器组件,它方便开发者快速搭建页面的基本结构。以下是对Container容器组件的详细介绍:
一、基本组成
Container容器组件主要包括以下几个部分:
<el-container>
:外层容器,用于包裹其他布局组件。<el-header>
:顶部容器,通常用于放置页面的头部信息,如导航栏、标题等。<el-aside>
:侧边栏容器,通常用于放置页面的侧边导航或功能区块。<el-main>
:主要内容区域,用于放置页面的主要内容和功能。<el-footer>
:底部容器,通常用于放置页面的底部信息,如版权信息、联系方式等。
二、布局方式
Container容器组件支持多种布局方式,以满足不同的页面需求:
- 默认布局:当
<el-container>
的子元素不包含<el-header>
或<el-footer>
时,子元素会水平左右排列;当包含<el-header>
或<el-footer>
时,子元素会垂直上下排列。 - 水平布局:通过设置
<el-container>
的direction属性为horizontal,可以实现子元素的水平排列。这种布局方式通常用于页面的顶部导航或底部信息栏。 - 垂直布局:通过设置
<el-container>
的direction属性为vertical,可以实现子元素的垂直排列。这种布局方式通常用于页面的主体内容区域。 - 垂直反向布局:通过设置
<el-container>
的direction属性为vertical-reverse,可以实现子元素的垂直反向排列。这种布局方式相对较少使用,但在某些特定场景下可能会用到。
三、嵌套使用
Container容器组件支持嵌套使用,以实现更复杂的页面布局。例如,可以在<el-main>
中再嵌套一个<el-container>
,用于实现页面的二级布局或更多层次的布局。
四、其他属性
除了上述布局方式外,Container容器组件还支持一些其他属性,用于更精细地控制布局:
- justify:用于设置子元素的水平对齐方式。可选值包括start、end、center、space-between、space-around等。
- align:用于设置子元素的垂直对齐方式。可选值包括top、middle、bottom等。
五、使用示例
以下是一个简单的Container容器组件使用示例:
<template><el-container style="height: 100vh;"><el-header>Header</el-header><el-container direction="horizontal"><el-aside width="200px">Aside</el-aside><el-main>Main</el-main></el-container><el-footer>Footer</el-footer></el-container>
</template><script>
export default {name: 'App'
}
</script>
在这个示例中,我们使用了两个嵌套的<el-container>
组件来实现一个包含头部、侧边栏、主要内容区域和底部的页面布局。其中,<el-header>
用于放置头部信息,<el-aside>
用于放置侧边导航,<el-main>
用于放置主要内容,<el-footer>
用于放置底部信息。
六、注意事项
- 合理使用嵌套:虽然Container容器组件支持嵌套使用,但过多的嵌套可能会导致布局变得复杂和难以维护。因此,在使用时要合理控制嵌套层数。
- 注意属性搭配:在使用Container容器组件时,要注意属性的搭配和设置,以确保布局效果符合预期。
- 避免与CSS冲突:由于Container容器组件是基于Flex布局实现的,因此在与自定义CSS样式搭配使用时,要注意避免冲突和覆盖问题。
综上所述,ElementUI的Container容器组件是一个功能强大且灵活的布局工具,可以帮助开发者快速搭建页面的基本结构并实现复杂的布局效果。在使用时,需要合理控制嵌套层数、注意属性搭配和避免与CSS冲突等问题,以便实现最佳的布局效果。
8.4.2 NavMenu 导航菜单
ElementUI的NavMenu导航菜单组件是一个为网站或应用提供导航功能的菜单组件,它通常用于网站平台的顶部或侧边栏菜单导航。以下是对NavMenu导航菜单的详细介绍:
一、基本属性
- mode:导航栏的模式,可选值为vertical(垂直)和horizontal(水平)。默认为vertical,即垂直模式。
- default-active:设置激活(即高亮显示)的菜单项的index。
- router:是否使用vue-router的模式,如果启用该模式,则可以通过index作为path进行路由跳转。
二、组件结构
NavMenu导航菜单主要由以下几个部分组成:
<el-menu>
:导航菜单的根组件,用于包裹所有的菜单项和子菜单。<el-menu-item>
:导航菜单中的子菜单项,通常用于放置导航链接或功能按钮。<el-submenu>
:生成二级或更多级别的子菜单,其内部可以包含<el-menu-item>
或其他<el-submenu>
。
三、使用示例
以下是一个包含二级菜单的NavMenu导航菜单的使用示例:
<template><el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect"><el-menu-item index="1">处理中心</el-menu-item><el-submenu index="2"><template slot="title">我的工作台</template><el-menu-item index="2-1">选项1</el-menu-item><el-menu-item index="2-2">选项2</el-menu-item><el-menu-item index="2-3">选项3</el-menu-item><el-submenu index="2-4"><template slot="title">选项4</template><el-menu-item index="2-4-1">选项1</el-menu-item><el-menu-item index="2-4-2">选项2</el-menu-item><el-menu-item index="2-4-3">选项3</el-menu-item></el-submenu></el-submenu><el-menu-item index="3" disabled>消息中心</el-menu-item><el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item></el-menu>
</template><script>
export default {data() {return {activeIndex: '1'};},methods: {handleSelect(key, keyPath) {console.log(key, keyPath);}}
};
</script><style scoped>
.el-menu-demo {background-color: #fff;text-color: #333;active-text-color: #409EFF;
}
</style>
四、注意事项
- index的唯一性:每个
<el-menu-item>
和<el-submenu>
的index属性必须是唯一的,以便正确地进行路由跳转和菜单激活。 - router属性的使用:如果启用了router属性,则需要确保每个菜单项的index与路由路径相对应,以便实现正确的路由跳转。
- 样式调整:可以通过自定义CSS样式来调整导航菜单的外观和布局,以满足不同的设计需求。
- 嵌套使用:
<el-submenu>
可以嵌套使用以创建多级菜单,但需要注意嵌套层数的控制,避免菜单结构过于复杂。 - 事件处理:可以通过监听@select事件来处理菜单项的点击事件,以实现自定义的逻辑处理。
五、常见问题
- 刷新页面时路由不匹配:在刷新页面时,如果路由与当前激活的菜单项不匹配,可以通过在Vue组件的mounted钩子中调用路由跳转函数来重置路由。
- 水平菜单过长时的处理:当水平菜单项过多导致菜单过长时,可以考虑使用滚动条或响应式设计来处理布局问题。
- 禁用菜单项:可以通过设置
<el-menu-item>
的disabled属性来禁用某个菜单项,使其不可点击。
综上所述,ElementUI的NavMenu导航菜单组件是一个功能强大且灵活的导航工具,可以帮助开发者快速搭建网站的导航结构并实现复杂的导航功能。在使用时,需要注意属性的搭配和设置、样式调整、嵌套层数的控制以及事件处理等问题,以便实现最佳的导航效果。
8.4.3 Header 头部布局
Header头部布局是网页或应用界面中的一个关键部分,通常用于展示品牌标识、导航菜单、用户信息等元素。在使用Element UI进行Header头部布局时,可以充分利用其提供的布局组件和样式工具来实现一个美观、实用的头部区域。以下是一些关于Element UI中Header头部布局的关键点和步骤:
一、基本布局组件
Element UI提供了多种布局组件,其中Container、Header、Aside、Main、Footer等是用于构建页面整体布局的。在Header头部布局中,主要使用的是Header组件。
二、布局方式
- Flex布局:
- Flex布局是一种强大的布局方式,它允许容器内的项目能够灵活地伸缩其尺寸,以最佳方式填充可用空间。
- 在Header头部布局中,可以使用Flex布局来实现元素的左右对齐、居中对齐等效果。
- 通过设置display: flex;以及相关的justify-content和align-items属性,可以轻松地控制Header内元素的布局方式。
- 栅格布局:
- 虽然栅格布局(Row和Col组件)主要用于页面的主体部分,但在某些情况下,也可以在Header头部布局中使用栅格布局来划分更复杂的区域。
- 不过,在大多数情况下,Header头部布局相对简单,使用Flex布局就足够了。
三、实现步骤
- 引入Element UI:
- 在Vue项目中引入Element UI库,并在组件中注册所需的布局组件。
- 编写Header模板:
- 使用
<el-header>
标签来定义Header区域。 - 在
<el-header>
内部,可以放置图片、文本、按钮等元素来实现所需的布局效果。
- 使用
- 设置样式:
- 通过CSS样式来设置Header的背景色、字体颜色、内边距等属性。
- 可以使用Element UI提供的工具类样式,也可以自定义样式来满足特定的设计需求。
- 添加交互功能:
- 如果Header中包含按钮或其他可交互元素,需要为它们添加相应的事件处理函数。
- 例如,为退出按钮添加点击事件处理函数,以实现用户注销功能。
四、示例代码
以下是一个使用Element UI实现Header头部布局的示例代码:
<template><el-container><el-header class="header"><div class="header-left"><img src="path/to/logo.png" alt="Logo" /><span>品牌名称</span></div><div class="header-right"><el-button type="info" @click="logout">退出</el-button></div></el-header><!-- 其他布局组件,如el-aside、el-main等 --></el-container>
</template><script>
export default {methods: {logout() {// 实现注销功能的逻辑window.sessionStorage.clear();this.$router.push('/login');}}
}
</script><style scoped>
.header {background-color: #373d41;display: flex;justify-content: space-between;align-items: center;padding: 0 20px;color: #fff;font-size: 20px;
}.header-left {display: flex;align-items: center;
}.header-left img {width: 50px;height: 50px;
}.header-left span {margin-left: 10px;
}.header-right {display: flex;
}.header-right .el-button {margin-left: 10px;
}
</style>
五、注意事项
- 避免过深的嵌套层级:在使用Container及其子组件进行布局时,尽量避免过深的嵌套层级,这不仅会增加代码复杂度,还会影响性能和维护性。
- 合理设置边距和填充:根据设计需求合理设置组件的边距和填充,确保布局美观统一。
- 响应式布局:如果需要支持多种屏幕尺寸的设备,可以考虑使用Element UI提供的响应式布局功能。
通过以上步骤和注意事项,可以使用Element UI轻松实现一个美观、实用的Header头部布局。