【Vue实战项目】学完前端基础后,可能你还需要掌握这些才能接手开发项目

本文涉及的产品
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
简介: 【Vue实战项目】学完前端基础后,可能你还需要掌握这些才能接手开发项目

1.前言

本文是作者前端系列专栏中的一文,本专栏主要针对JAVA后端,协助JAVA后端快速入门前端,让JAVA后端能在日常工作中看懂、微调一些前端内容


在当前的前端项目的开发中,往往会有这样的感觉,前端三大件HTML、CSS、JS,以及会经常用到的vue、webpack、less等内容都学了,但是还是写不动项目。原因就在于,项目中有一些“粘合剂”般的内容属于上面的范畴或者属于上面范畴里面我们在学习时不太容易留意到的内容,但这些“粘合剂”在攒起整个项目的骨架中扮演了很重要的角色,不搞懂它们,就会给人一种前端已经学了,但是还是接手不动项目的感觉。


系列的前文中,我们已经从0开始入门前端三大件HTML、CSS、JS,以及会经常用到的vue、webpack、less等内容,并且从0一步搭建了一个vue项目出来。基于这个架子我们开发了学生管理模块。虽然前文每一步都讲得很清楚,跟着文章能一步步做出来,到这里我们就来解决一下项目中这些"粘合剂"的问题。


来到一切的入口main.js,秘密就藏在这里面。看到main.js我们就要提出几个疑惑了:


使用UI框架的时候为什么是Vue.use(ElementUI)喃?Element作为依赖为什么不像其它依赖一样在要用到的组件内部引入它喃?


为什么使用我们自定义路由(router)的时候,要去new Vue{router,render:h=>h(App)}喃?这一步是干什么?我们自定义的路由又是怎么实现的?

import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import 'font-awesome/css/font-awesome.min.css'
import router from './router'
import service from './utils/service';
 
Vue.use(ElementUI)
//挂载到原型,可以在全局使用
Vue.prototype.service=service;
Vue.config.productionTip = false
 
new Vue({
  //挂在router
  router,
  render: h => h(App),
}).$mount('#app')

除此之外还有一些问题,诸如:

export用来做什么?怎么用?

Vue的生命周期钩子函数

等等问题

可以说掌握了HTML、CSS、JS、Vue、node.js、less、webpack、ts这些基础必备的前端技能后,还要搞明白本文所提到的这些很散的知识点,才能完全比较顺畅的在当前流程的前端项目的架子下进行上手开发。

2.export

export是es6开始出现的新语法,允许全局暴露变量、方法、对象出去,方便在其它地方调用。export一般和import配合使用。

代码示例:

mathOperations.js

// 导出一个名为 multiply 的函数
export const multiply = (a, b) => a * b;
// 导出一个名为 divide 的函数
export const divide = (a, b) => a / b;

导入并使用

// 导入 mathOperations 模块中的 multiply 和 divide 函数
import { multiply, divide } from './mathOperations';
// 使用导入的函数
console.log(multiply(10, 5)); // 输出 50
console.log(divide(20, 4)); // 输出 5

在vue中会使用export来对外暴露组件:

export default {
  name: "HelloWorld",
  data() {
    return {
      message: "JAVA天下第一",
    };
  }


上面的代码其实就是用export来暴露了一个对象。要注意的是这是标准的es6语法,在es6中允许函数进行简写,前面不用function修饰,所以data(){}是合法的语法。


export default和export的区别:


export default一个模块(一个js)中只能有一个,用来导出这个模块中所有要对外暴露的东西。


export一个模块(一个js)中可以有很多个,用来分散导出想对外暴露的所有东西,export需要跟上名称。

3.Vue.use()

当我们在使用诸如ElementUI之类的全局都要用到的东西时,会用以下语法来注册它们:

import Vue from 'vue'
import ElementUI from 'element-ui';
Vue.use(ElementUI);

vue中有一个Vue构造器,所有vue组件都是基于这个Vue构造器来进行构造的,这个构造器允许向其中注册各种Vue插件,以实现各个vue组件中都能使用到注册插件的效果。ElementUI就是一种vue插件,vue插件需要满足一些标准,就能被Vue构造器识别。

当不用Vue.use()时,要在组件中用到ElementUI中的组件时,就会是以下效果:

<template>
  <div>
    <el-button>默认按钮</el-button>
  </div>
</template>
<script>
import ElButton from 'element-ui/lib/button'; // 导入 ElButton 组件
export default {
  components: {
    ElButton, // 注册 ElButton 为局部组件
  },
};
</script>

components是专门用来暴露组件的属性。


这时候可能会有一个疑惑:


为什么要export喃?import了还不够吗?


光是import不行,因为import可以import很多内容,js的依赖层级也可能很复杂很深,通过import来编译,性能会炸掉,不好根据import来编译标签,所以用export机制来将依赖的组件全部暴露出去,方便编译。

4.Vue.component

5.路由

main.js是程序的入口,脚手架搭建出来就会有new Vue()的代码段,router是Vue的一个成员变量,在new Vue的时候可以指定自定义的router:

import router from './router'
new Vue({
 //挂在router
 router,
 render: h => h(App),
}).$mount('#app')

,.mount 或 .$$mount(在某些版本中是 $mount)是 Vue 实例上的一个方法,用于将 Vue 实例挂载到 DOM(文档对象模型)上。必须将Vue示例挂载到HTML元素上,Vue才会被浏览器解析出来。

自定义的router:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export default new Router({
    routes:[
        {
            path:'/',
            redirect:'/login',
            hidden:true,
            component: ()=>import('@/components/Login')
        },
        {
            path:'/login',
            name:'Login',
            hidden:true,
            component: ()=>import('@/components/Login')
        },
        {
            path:'/home',
            name:'学生管理',
            iconClass:'fa fa-users',
            //默认转跳到学生管理页
            redirect:'/home/student',
            component: ()=>import('@/components/Home'),
            children:[
                {
                    path:'/home/student',
                    name:'学生列表',
                    iconClass:'fa fa-list',
                    component: ()=>import('@/components/students/StudentList'),
                },
                {
                    path:'/home/info',
                    name:'信息列表',
                    iconClass:'fa fa-list-alt',
                    component: ()=>import('@/components/students/InfoList'),
                },
                {
                    path:'/home/infos',
                    name:'信息管理',
                    iconClass:'fa fa-list-alt',
                    component: ()=>import('@/components/students/InfoLists'),
                },
                {
                    path:'/home/work',
                    name:'作业列表',
                    iconClass:'fa fa-list-ul',
                    component: ()=>import('@/components/students/WorkList'),
                },
                {
                    path:'/home/workMent',
                    name:'作业管理',
                    iconClass:'fa fa-list',
                    component: ()=>import('@/components/students/WorkMent'),
                }
            ]
        },
        {
            path:'/home/dataview',
            name:'数据分析',
            iconClass:'fa fa-bar-chart',
            component: ()=>import('@/components/Home'),
            children:[
                {
                    path:'/home/dataview',
                    name:'数据概览',
                    iconClass:'fa fa-list',
                    component: ()=>import('@/components/dataAnalysis/DataView'),
                },
                {
                    path:'/home/mapview',
                    name:'地图概览',
                    iconClass:'fa fa-line-chart',
                    component: ()=>import('@/components/dataAnalysis/DataView'),
                },
                {
                    path:'/home/travel',
                    name:'旅游地图',
                    iconClass:'fa fa-line-chart',
                    component: ()=>import('@/components/dataAnalysis/ScoreMap'),
                },
                {
                    path:'/home/score',
                    name:'分数地图',
                    iconClass:'fa fa-line-chart',
                    component: ()=>import('@/components/dataAnalysis/TravelMap'),
                }
            ]
        },
        {
            path:'/users',
            name:'用户中心',
            iconClass:'fa fa-user',
            component: ()=>import('@/components/Home'),
            children:[
                {
                    path:'/home/user',
                    name:'用户概览',
                    iconClass:'fa fa-list',
                    component: ()=>import('@/components/users/User'),
                }
            ]
        },
        {
            path:'*',
            name:'NotFound',
            hidden:true,
            component:()=>import('@/components/NotFound')
        }
    ],
    mode:'history'
})

6.生命周期钩子函数

Vue.js 提供了一套生命周期钩子函数,用于在组件的不同阶段插入回调函数的,这些阶段包括组件从创建到销毁的整个过程。Vue 2.x 和 Vue 3.x 的生命周期有所变化,尤其是在 Vue 3 中引入了组合式 API。以下是 Vue 2.x 的生命周期钩子函数及其简要说明,以及一些代码示例:

常用到的无非就是创建时的前置操作,销毁时的前置操作。

创建时的前置操作:

   export default {
     data() {
       return { message: 'Hello from created hook!' };
     },
     created() {
       console.log(this.message);
       // 这里可以进行数据的获取或其他初始化操作
     }
   };

销毁前的前置操作:

   export default {
     beforeDestroy() {
       console.log('Component is about to be destroyed...');
       // 清理工作
     }
   };

销毁后的前置操作:

   export default {
     destroyed() {
       console.log('Component is destroyed.');
       // 执行必要的清理操作
     }
   };
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
目录
相关文章
|
1天前
|
监控 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(2)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
13 1
|
1天前
|
负载均衡 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(1)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
14 1
|
4天前
|
缓存 移动开发 前端开发
在PWA的开发中,HTML与CSS作为前端技术的基础,发挥着至关重要的作用
【6月更文挑战第14天】PWA(渐进式网页应用)借助HTML和CSS,提供接近原生应用的体验。HTML构建页面结构和内容,响应式设计适应各种设备,语义化标签提升可访问性,Manifest文件配置应用元数据,离线页面保证无网时体验。CSS则用于定制主题样式,创建动画效果,实现响应式布局,并管理字体和图标。两者协同工作,确保PWA在不同环境下的优秀性能和用户体验。随着前端技术进步,HTML与CSS在PWA中的应用将更加深入。
17 2
|
6天前
|
Web App开发 运维 前端开发
从0开始搭建一个前端项目的架子
从0开始搭建一个前端项目的架子
9 1
|
6天前
|
前端开发 JavaScript 安全
微前端架构采用 TypeScript 提升开发效率和代码可靠性
【6月更文挑战第12天】微前端架构采用 TypeScript 提升开发效率和代码可靠性。TypeScript 的类型安全防止了微前端间的类型错误,智能提示与自动补全加速开发,重构支持简化代码更新。通过定义公共接口和使用 TypeScript 编写微前端,确保通信一致性与代码质量。在构建流程中集成 TypeScript,保证构建正确性。总之,TypeScript 在微前端架构中扮演关键角色,推荐用于大型前端项目。
30 4
|
6天前
|
缓存 前端开发 JavaScript
Webpack作为模块打包器,为前端项目提供了高度灵活和可配置的构建流程
【6月更文挑战第12天】本文探讨了优化TypeScript与Webpack构建性能的策略。理解Webpack的解析、构建和生成阶段是关键。优化包括:调整tsconfig.json(如关闭不必要的类型检查)和webpack.config.js选项,启用Webpack缓存,实现增量构建,代码拆分和懒加载。这些方法能提升构建速度,提高开发效率。
28 3
|
13天前
|
存储 前端开发 Windows
对于莫名其妙使用smarttomcat上传前端项目失败,上传css等静态资源失败等原因,及解决方法
对于莫名其妙使用smarttomcat上传前端项目失败,上传css等静态资源失败等原因,及解决方法
|
14天前
|
JavaScript 前端开发 应用服务中间件
蓝易云 - dockerfile部署前端vue打包的dist文件实战
这样,你的Vue应用就会在Docker容器中运行,你可以通过访问[http://localhost:8080](http://localhost:8080/)来查看你的应用。
107 0
|
17天前
|
JavaScript 前端开发 Java
基于SpringBoot+Vue+uniapp的在线开放课程的Web前端的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的在线开放课程的Web前端的详细设计和实现(源码+lw+部署文档+讲解等)
|
19天前
|
JavaScript 前端开发 API
【前端--Vue】组件之间的多种通信方式,一文彻底搞懂组件通信!
【前端--Vue】组件之间的多种通信方式,一文彻底搞懂组件通信!
【前端--Vue】组件之间的多种通信方式,一文彻底搞懂组件通信!