【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.');
       // 执行必要的清理操作
     }
   };
相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
目录
相关文章
|
25天前
|
前端开发 JavaScript API
(前端3D模型开发)网页三维CAD中加载和保存STEP模型
本文介绍了如何使用`mxcad3d`库在网页上实现STEP格式三维模型的导入与导出。首先,通过官方教程搭建基本项目环境,了解核心对象如MxCAD3DObject、Mx3dDbDocument等的使用方法。接着,编写了加载和保存STEP模型的具体代码,包括HTML界面设计和TypeScript逻辑实现。最后,通过运行项目验证功能,展示了从模型加载到保存的全过程。此外,`mxcad3d`还支持多种其他格式的三维模型文件操作。
|
5天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
66 17
|
12天前
|
开发框架 前端开发 JavaScript
uniapp开发鸿蒙,是前端新出路吗?
相信不少前端从业者一听uniapp支持开发鸿蒙Next后非常振奋。猫林老师作为7年前端er也是非常激动,第一时间体验了下。在这里也给大家分享一下我的看法
56 17
|
2月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
177 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
18天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
55 3
|
16天前
|
前端开发 搜索推荐 安全
陪玩系统架构设计陪玩系统前后端开发,陪玩前端设计是如何让人眼前一亮的?
陪玩系统的架构设计、前后端开发及前端设计是构建吸引用户、功能完善的平台关键。架构需考虑用户需求、技术选型、安全性等,确保稳定性和扩展性。前端可选用React、Vue或Uniapp,后端用Spring Boot或Django,数据库结合MySQL和MongoDB。功能涵盖用户管理、陪玩者管理、订单处理、智能匹配与通讯。安全性方面采用SSL加密和定期漏洞扫描。前端设计注重美观、易用及个性化推荐,提升用户体验和平台粘性。
48 0
|
1月前
|
存储 前端开发 JavaScript
前端状态管理:Vuex 核心概念与实战
Vuex 是 Vue.js 应用程序的状态管理模式和库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。本教程将深入讲解 Vuex 的核心概念,如 State、Getter、Mutation 和 Action,并通过实战案例帮助开发者掌握在项目中有效使用 Vuex 的技巧。
|
2月前
|
前端开发 测试技术
前端工程化的分支策略要如何与项目的具体情况相结合?
前端工程化的分支策略要紧密结合项目的实际情况,以实现高效的开发、稳定的版本控制和顺利的发布流程。
30 1
|
2月前
|
Web App开发 缓存 监控
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
37 1
|
2月前
|
Web App开发 前端开发 JavaScript
前端性能优化实战:从代码到部署的全面指南
前端性能优化实战:从代码到部署的全面指南
39 1