【带小白做项目】万字!计算机答辩常问问题——前端相关考察点

 本系列完整目录

后端基础篇【带小白做项目】万字!计算机答辩常问问题——后端基础篇-CSDN博客
前端篇【带小白做项目】万字!计算机答辩常问问题——前端相关考察点-CSDN博客
小程序篇【带小白做项目】万字!计算机答辩常问问题——小程序端相关考察点-CSDN博客
数据库篇【带小白做项目】万字!计算机答辩常问问题——数据库相关问题-CSDN博客
论文&测试篇【带小白做项目】万字!计算机答辩常问问题——论文相关及测试篇-CSDN博客

本篇目录

 本系列完整目录

1.简单介绍一下vue

2.vue目录项目构成

3.npm基本命令

4.session是什么

5.post和get有什么区别

6.前后端如何实现数据传输

7.路由

8.面包屑导航

9.组件的使

1.简单介绍一下vue

        Vue是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。Vue将组成一个页面的HTML,CSS和JS合并到一个组件中,可以被其他组件或页面引入而重复利用。通常每个.Vue文件作为一个组件导出,组件可以作为基础组件(如按钮)或一个页面(如登录页面)。组件化很好的将一个庞大复杂的前端工程拆分为一个个组件,重复利用的性质也大大提高了开发的效率。

2.vue目录项目构成

package.json是项目的配置文件,常见的配置有配置项目启动、打包命令,声明依赖包等。package.json 文件是一个 JSON 对象,该对象的每一个成员就是当前项目的一项设置。当我们克隆一个新的项目到本地时,需要执行 npm install(yarn install)命令来安装项目所需的依赖文件。当执行该命令时,就会根据 package.json 文件中的配置信息来自动下载所需的模块,也就是配置项目所需的运行和开发环境。

package.json 中最重要的两个字段就是 name 和 version,它们都是必须的,如果没有,就无法正常执行 npm install 命令。npm 规定 package.json 文件是由名称和版本号作为唯一标识符的。

img

name 很容易理解,就是项目的名称,它是一个字符串。在给 name 字段命名时,需要注意以下几点:

  • 名称的长度必须小于或等于 214 个字符,不能以 “.” 和“_”开头,不能包含大写字母(这是因为当软件包在 npm 上发布时,会基于此属性获得自己的 URL,所以不能包含非 URL 安全字符(non-url-safe));

  • 名称可以作为参数被传入 require(""),用来导入模块,所以应当尽可能的简短、语义化;

  • 名称不能和其他模块的名称重复,可以使用 npm view 命令查询模块名是否重复,如果不重复就会提示 404:

version 字段表示该项目包的版本号,它是一个字符串。在每次项目改动后,即将发布时,都要同步的去更改项目的版本号。

package-lock.json 文件一般是在npm install时自动生成的,会保存 node_modules 中所有包的信息,包括精确版本 version 和下载地址 resolved 以及依赖关系 dependencies 等,用以记录当前状态下实际安装的各个模块的具体来源和版本号。这样 npm install 时速度就会提升。当删除 node_module 目录时,想通过 npm install 恢复所有包时,提升下载速度;锁定版本号,防止自动升级新版本。

main.js是vue的入口文件,文件中定义了一个vue对象,其中el为实例提供挂载元素。

3.npm基本命令

npm install 用于安装依赖包。当你执行 npm install 时,npm 将会根据项目中的 package.json 文件中的依赖列表,下载并安装所有依赖。

npm run用于运行定义在 package.json 文件中的脚本。

4.session是什么

Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。Session是由服务器端创建的。

5.post和get有什么区别

首先是从语义的角度来说,post和put通常用于提交数据,例如增、改操作,get通常用户获取数据,例如查找操作,delete用于删除数据。

其次post和get请求对于参数的传递方式不同。在GET请求中参数是跟在URL后面,使用params传递,参数会动态拼接到url地址中,即 ?id=xx&name=xxx,数据可见。post请求中参数是放在body中,使用data传递,请求的数据不可见。

get请求采用 axios.get(url,{params: 对象})

post请求 axios.post(url,对象)

 //封装对象
         let user = {
           name: "mysql",
           age: 18,
           sex: "女"
         }
         axios.get(
           "http://localhost:8090/axios/user/getUserObj",{params: user})
           .then(function(result){
             console.log(result.data)
           })
   axios.get("http://localhost:8090/axios/user/getUserObj",
         {
           //key: value  key固定写法 params 参数对象
           params: {
             //再写用户的参数
             name: "mysql",
             age: 18,
             sex: "女"
           }
         }).then(function(result){
           console.log(result.data)
         }) 
 ​
 ​
           let user = {
             name: "post请求的语法",
             age: 20,
             sex: '女'
           }
           let url1 = "http://localhost:8090/axios/insertUser"
           axios.post(url1, user)
                .then(function(result){
                  console.log(result.data)
                })
 ​

6.前后端如何实现数据传输

前、后端使用ajax进行交互,前端使用vue框架,首先需要引入axios组件,并在main.js文件中引入

 import axios from 'axios' // 导入axios库,用于发送HTTP请求
 import router from '@/router/router-static' // 导入路由模块,用于页面跳转
 import storage from '@/utils/storage' // 导入存储模块,用于操作本地存储
 ​
 const http = axios.create({ // 创建一个axios实例
     timeout: 1000 * 86400, // 设置请求超时时间,单位为毫秒
     withCredentials: true, // 允许携带cookie
     baseURL: '/alumni', // 设置基础URL
     headers: { // 设置请求头
         'Content-Type': 'application/json; charset=utf-8' // 设置内容类型为JSON格式,字符集为UTF-8
     }
 })
 ​
 // 请求拦截
 http.interceptors.request.use(config => { // 使用请求拦截器
     config.headers['Token'] = storage.get('Token') // 在请求头中添加Token字段,值为本地存储中的Token值
     return config // 返回修改后的请求配置
 }, error => { // 请求错误处理
     return Promise.reject(error) // 返回一个被拒绝的Promise对象
 })
 ​
 // 响应拦截
 http.interceptors.response.use(response => { // 使用响应拦截器
     if (response.data && response.data.code === 401) { // 如果响应数据存在且code为401(表示token失效)
         router.push({ name: 'login' }) // 跳转到登录页面
     }
     return response // 返回响应数据
 }, error => { // 响应错误处理
     return Promise.reject(error) // 返回一个被拒绝的Promise对象
 })
 ​
 export default http // 导出http实例,供其他模块使用
 ​

然后就可以使用this.$http发起http请求,调用后端接口,并将所需要的参数和请求路径url进行传递。后端controller层会接收到请求,并调用service层进行业务处理,进而通过mapper层进行数据库操作,将返回的数据传递给前端,前端页面获取到数据进行渲染展示到页面上。

 this.$http({
         url: `${this.$storage.get("sessionTable")}/update`,
         method: "post",
         data: this.ruleForm
       }).then(({ data }) => {
         if (data && data.code === 0) {
           this.$message({
             message: "修改信息成功",
             type: "success",
             duration: 1500,
             onClose: () => {
               // console.log(this.flag)
               if (this.flag == 'users') {
                 this.$storage.set('headportrait', this.ruleForm.image)
               }
             }
           });

7.路由

在src/router/index.js,这个文件就是路由的核心文件:

 import Vue from 'vue'   //引入Vue
 import Router from 'vue-router'  //引入vue-router
 import Hello from '@/components/Hello'  //引入根目录下的Hello.vue组件
  
 Vue.use(Router)  //Vue全局使用Router
  
 export default new Router({
   routes: [              //配置路由,这里是个数组
     {                    //每一个链接都是一个对象
       path: '/',         //链接路径
       name: 'Hello',     //路由名称,
       component: Hello   //对应的组件模板
     },{
       path:'/hi',
       component:Hi,
       children:[        //子路由,嵌套路由 (此处偷个懒,免得单独再列一点)
         {path:'/',component:Hi},
         {path:'hi1',component:Hi1},
         {path:'hi2',component:Hi2},
       ]
     }
   ]
 })

8.面包屑导航

在router配置中加入meta(元数据)对象,存放一些自定义的内容。例如在面包屑的实现中加入title变量,这个变量则是面包屑展示出来的多级标题;

 {
       path: '/updatePassword',
       name: '修改密码',
       component: UpdatePassword,
       meta: {icon:'', title:'updatePassword'}
 }

在用到面包屑的页面中调用watch监听,监听route的变化,用this.$route.matched获取到匹配当前路由的所有片段的配置参数对象,返回一个数组,存到list中

watch: {
     $route() {
       this.getBreadcrumb()
     }

用v-for 遍历li标签,将list.meta.title作为router-link的{标题信息},:to=“list.path”,将list信息动态渲染到面包屑上

 <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
   <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" >{{ item.name }}</span>
   <a v-else @click.prevent="handleLink(item)">
     <span class="icon iconfont icon-xihuan"></span>首页
   </a>
 </el-breadcrumb-item>

9.组件的使用

在components中创建vue文件,实现一个组件。要使用一个子组件,我们需要在父组件中导入它,之后可以像普通组件一样进行使用。

<script setup>
 import ButtonCounter from './ButtonCounter.vue'
 </script>
 ​
 <template>
   <h1>Here is a child component!</h1>
   <ButtonCounter />
 </template>
  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值