Vue2尚品汇前台项目笔记——(1)项目初始化

news2024/10/4 12:24:35

Vue2尚品汇前台项目笔记

一、项目初始化

使用[脚手架创建项目,具体参考之前的脚手架配置笔记,我起名叫vue_shop_test

1.脚手架目录分析

node_modules文件夹:项目依赖文件夹

public文件夹:一般放置一些静态资源(图片),需要注意,放在public文件夹中的静态资源,webpack进行打包的时候会原封不动打包到dist文件夹中。

src文件夹(程序员源代码文件夹):

assets文件夹:一般也是放置静态资源(一般放置多个组件共用的静态资源),需要注意,放置在assets文件夹里面静 态资源,在webpack打包的时候,webpack会把静态资源当做一个模块,打包JS文件里面。

components文件夹:一般放置的是非路由组件(全局组件)

App.vue:唯一的根组件,Vue当中的组件(.vue)

main.js:程序入口文件,也是整个程序当中最先执行的文件

babel.config.js:配置文件(babel相关)

package.json文件:认为项目身份证,记录项目叫做什么、项目当中有哪些依赖、项目怎么运行。

package-lock.json:缓存性文件

README.md:说明性文件

2.项目的其他配置

2.1 项目运行,浏览器自动打开
package.json
    "scripts": {
    "serve": "vue-cli-service serve --open",	//加上--open
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
    },
2.2 关闭eslint校验工具(不关闭会有各种规范,不按照规范就会报错)
  • 根目录下创建vue.config.js,进行配置
  • 比如:声明变量但是没有使用eslint校验工具报错。
module.exports = {
  //关闭eslint
  lintOnSave: false
}
2.3 src文件夹配置别名

创建jsconfig.json,【用@代替src文件夹,这样将来文件很多,找的时候也方便很多】,exclude表示不可以使用该别名的文件

 {
    "compilerOptions": {
        "baseUrl": "./",
            "paths": {
            "@/*": [
                "src/*"
            ]
        }
    },

    "exclude": [
        "node_modules",
        "dist"
    ]
 }

3.项目路由分析

vue-router

前端所谓路由:key-value键值对。

key:URL(地址栏中的路径)

value:相应的路由组件

注意:项目上中下结构

路由组件:

​ Home首页路由组件、Search路由组件、login登录路由、Register注册路由

非路由组件:
Header【首页、搜索页】
Footer【在首页、搜索页】,但是在登录和注册页面是没有

4、完成非路由组件Header与Footer业务

在咱们项目当中,不在以HTML+CSS为主,主要搞业务、逻辑

在开发项目的时候:
1:书写静态页面(HTML+CSS)
2:拆分组件
3:获取服务器的数据动态展示
4:完成相应的动态业务逻辑

注意1:创建组件的时候,组件结构+组件的样式+图片资源

注意2:咱们项目采用的less样式,浏览器不识别less样式,需要通过less、less-loader【安装五版本的】进行处理
less,把less样式变为css样式,浏览器才可以识别。

注意3:如果想让组件识别less样式,需要在style标签的身上加上1ang=less

4.1使用组件的步骤(非路由组件)

​ -创建或者定义

​ -引入

​ -注册

​ -使用

5路由组件的搭建

vue-router

在上面分析的时候,路由组件应该有四个:Home、Search、Login、Register

​ -components文件夹:经常放置的非路由组件(共用全局组件)
​ -pages|views文件夹:经常放置路由组件

5.1配置路由

项目当中配置的路由一般放置在router文件夹中

5.2总结

路由组件与非路由组件的区别?

1:路由组件一般放置在pages|views文件夹,非路由组件一般放置components文件夹中
2:路由组件一般需要在router文件夹中进行注册(使用的即为组件的名字),非路由组件在使用的时候,一般都是以标签的形
式使用
3:注册完路由,不管路由路由组件、还是非路由组件身上都有 r o u t e 、 route、 routerouter属性

$route:一般获取路由信息【路径、query、params等等】
$router:一般进行编程式导航进行路由跳转【push|replace】

6.Footer组件显示与隐藏

显示或者隐藏组件:V-if|v-show

v-if:操作dom在节点处是真有还是真没有,会频繁操作dom,很消耗性能

v-show:只是通过操作样式将元素显示或隐藏(display,blockl)

从性能的角度考虑,v-show更好

Footer组件:在Home、Search显示Footer组件

Footer组件:在登录、注册时候隐藏的

6.1路由路径判断

我们可以根据组件身上的$route获取当前路由的信息,通过路由路径判断Footer显示与隐藏

    <!-- 在Home和Search下是显示的,在Login和Register下是隐藏的 -->
    <Footer v-show="$route.path == '/home' || $route.path == '/search'"></Footer>

但如果以后路由很多,那么这种情况下写起来会非常麻烦,不是最终解决手段

6.2路由元信息判断

配置的路由的时候,可以给路由添加路由元信息【meta】路由需要配置对象,它的key不能瞎写、胡写、乱写

routes: [
        {
            path: '/home',
            component: Home,
            meta: { showFooter: true }
        },
        {
            path: '/search',
            component: Search,
            meta: { showFooter: true }
        },
        {
            path: '/login',
            component: Login,
            meta: { showFooter: false }
        },
        {
            path: '/register',
            component: Register,
            meta: { showFooter: false }
        },
<Footer v-show="$route.meta.showFooter"></Footer>

7.路由传参

7.1:路由跳转有几种方式?

比如:A->B
声明式导航:router-link(务必要有to属性),可以实现路由的跳转
编程式导航:利用的是组件实例的$router.push|replace方法,可以实现路由的跳转。(可以书写一些自己业务)

7.2:路由传参,参数有几种写法?

query、params两个属性可以传递参数

query参数:不属于路径当中的一部分,类似于get请求,地址栏表现为 /search?k1=v1&k2=v2
query参数对应的路由信息 path: "/search"

params参数:属于路径当中的一部分,需要注意,在配置路由的时候,需要占位 ,地址栏表现为 /search/v1/v2
params参数对应的路由信息要改为path: "/search/:keyword" 这里的/:keyword就是一个params参数的占位符

//路由传递参数
//第一种:字符串传递
 this.$router.push('/search/' + this.keyword + '?k=' + this.keyword.toUpperCase())
//第二种:模板字符串
 this.$router.push(`/search/${this.keyword}?k=${this.keyword.toUpperCase()}`)
// 第三种:对象的写法(常用)   需要给路由命名
this.$router.push({
	name: 'search',
    params: { keyword: this.keyword },
    query: { k: this.keyword.toUpperCase() }
})
  • params传参问题
    (1)如何指定params参数可传可不传
  如果路由path要求传递params参数,但是没有传递,会发现地址栏URL有问题,详情如下:
  Search路由项的path已经指定要传一个keyword的params参数,如下所示:
  path: "/search/:keyword",
  执行下面进行路由跳转的代码:
  this.$router.push({name:"Search",query:{keyword:this.keyword}})
  当前跳转代码没有传递params参数
  地址栏信息:http://localhost:8080/#/?keyword=asd
  此时的地址信息少了/search
  正常的地址栏信息: http://localhost:8080/#/search?keyword=asd
  解决方法:可以通过改变path来指定params参数可传可不传 
  path: "/search/:keyword?",?表示该参数可传可不传

参考连接:https://blog.csdn.net/weixin_44867717/article/details/109773945

(2)由(1)可知params可传可不传,但是如果传递的是空串,如何解决 。

 this.$router.push({name:"Search",query:{keyword:this.keyword},params:{keyword:''}})
 出现的问题和1中的问题相同,地址信息少了/search
 解决方法: 加入||undefined,当我们传递的参数为空串时地址栏url也可以保持正常
 this.$router.push({name:"Search",query:{keyword:this.keyword},params:{keyword:''||undefined}})

(3)路由组件能不能传递props数据?
可以,有三种写法

//布尔值写法:params
props:true,
//对象写法:额外的给路由组件传递一些props
props:{a:1,b:2},
//函数写法:可以params参数、query参数,通过props传递给路由组件
props:($route)=>{
	return {keyword:$route.params.keyword,k:$route.query.k};
}

8、多次执行相同的push问题

多次执行相同的push问题,控制台会出现警告
例如:使用this.$router.push({name:‘Search’,params:{keyword:“…”||undefined}})时,如果多次执行相同的push,控制台会出现警告。

let result = this.$router.push({name:"Search",query:{keyword:this.keyword}})
console.log(result)

执行一次上面代码:

在这里插入图片描述

多次执行出现警告:

在这里插入图片描述

原因:push是一个promise,promise需要传递成功和失败两个参数,我们的push中没有传递。
方法:this.$router.push({name:‘Search’,params:{keyword:“…”||undefined}},()=>{},()=>{})后面两项分别代表执行成功和失败的回调函数。
这种写法治标不治本,将来在别的组件中push|replace,编程式导航还是会有类似错误
push是VueRouter.prototype的一个方法,在router中的index重写该方法即可(看不懂也没关系,这是前端面试题)

//1、先把VueRouter原型对象的push,保存一份
let originPush = VueRouter.prototype.push;
//2、重写push|replace
//第一个参数:告诉原来的push,跳转的目标位置和传递了哪些参数
VueRouter.prototype.push = function (location,resolve,reject){
    if(resolve && reject){
        originPush.call(this,location,resolve,reject)
    }else{
        originPush.call(this,location,() => {},() => {})
    }
}

绕了大半天,说白了就是push不是$router本来就带着的方法,而是原型上的,所以要统一修改的话必须从原型上下手而不是$router

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1457302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯:C++二叉树

二叉树 几乎每次蓝桥杯软件类大赛都会考核二叉树&#xff0c;它或者作为数据结构题出现&#xff0c;或者应用在其他算法中。大部分高级数据结构是基于二叉树的&#xff0c;例如常用的高级数据结构线段树就是基于二叉树的。二叉树应用广泛和它的形态有关。 二叉树的定义&#x…

Junit测试套件(Test Suite)

0. 什么是测试套件 对多个测试类的统一执行 只有一个测试类 点击一下执行就好有 5个测试类 分别打开 挨个点执行有100个测试类 &#xff1f;&#xff1f;分别点开执行 为100个测试类创建一个测试套件&#xff0c;然后再执行一次测试套件 √ 一个测试套件“囊括“三个测试类…

【Funny Game】 人生重开模拟器

目录 【Funny Game】 人生重开模拟器&#xff01; 人生重开模拟器&#xff01; 文章所属专区 Funny Game 人生重开模拟器&#xff01; 人生重开模拟器&#xff0c;让你体验从零开始的奇妙人生。在这个充满惊喜和挑战的游戏中&#xff0c;你可以自由选择性别、出生地、家庭背景…

Bpmn-js 属性控制

我们可以通过bpmn-js来访问对应的BPMN图例的属性信息。对应的流程图中的每个图例元素&#xff08;如开始、结束、中间/边界事件等都通过businessObject属性存储对基础BPMN元素的引用。业务对象是从BPMN 2.0 XML导入并在导出过程中序列化的实际元素。使用业务对象来读取和写入BP…

云渲染是什么?一文带你了解渲染100云渲染!

云渲染&#xff0c;做为设计行业必不可少的存在&#xff0c;新年伊始&#xff0c;带新朋友有更深入的了解。 云渲染的概念 云渲染是一种基于云计算的渲染服务&#xff0c;它利用云计算平台的强大计算能力来提供高效的渲染服务。 云渲染将3D程序放在远程的服务器中渲染&#x…

阿基米德签证小程序管理系统功能清单

阿基米德签证小程序管理系统&#xff0c;底层架构采用当前国内最流行的php框架thinkphp8.0、采用广泛使用的MYSQL数据库&#xff0c;管理后台前后台分离&#xff0c;同时使用了当今最流行的基于VUE3和elementPlus前端框架&#xff0c;小程序采用了支持多端合一的UNI-APP开发&am…

离线数仓(二)【用户行为日志采集平台搭建】

用户行为日志采集平台搭建 1、用户行为日志概述 用户行为日志的内容&#xff0c;主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式&#xff0c;有代…

力扣题目训练(15)

2024年2月8日力扣题目训练 2024年2月8日力扣题目训练507. 完美数520. 检测大写字母521. 最长特殊序列 Ⅰ221. 最大正方形237. 删除链表中的节点115. 不同的子序列 2024年2月8日力扣题目训练 2024年2月8日第十五天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括…

柚见(伙伴匹配系统)第六期

开发主页 开发主页&#xff08;默认推荐和自己兴趣相当的用户&#xff09;优化主页的性能&#xff08;缓存 定时任务 分布式锁&#xff09; 前端recommend 最简单&#xff1a;直接 list 列表 cv searchResult页面的代码 修改 后端接口 数据内容下边距修改 提取用户信息卡…

沁恒CH32V30X学习笔记06---串口dma接收+空闲中断组合接收数据

DMA 控制器提供 18 个通道,其中 DMA1 包含 7 个通道,DMA2 包含 11 个通道,每个通 道对应多个外设请求,通过设置相应外设寄存器中对应 DMA 控制位 通道映射 dma1 dma2 示例代码 bsp_usart_it.c /** bsp_usart_it.c** Created on: 2024年2月18日* Author: admin*/…

蓝桥杯Java组备赛(四)

高精度加法 import java.math.BigInteger; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);BigInteger a,b;a sc.nextBigInteger();b sc.nextBigInteger();System.out.println(a.add(b));sc.cl…

代码随想录算法训练营第十七天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和 [二叉树篇]

代码随想录算法训练营第十七天 LeetCode 110.平衡二叉树题目描述思路参考代码 LeetCode 257. 二叉树的所有路径题目描述思路参考代码 LeetCode 404.左叶子之和题目描述思路参考代码 LeetCode 110.平衡二叉树 题目链接&#xff1a;110.平衡二叉树 文章讲解&#xff1a;代码随想录…

可转债和股票有哪些区别?可转债和股票哪个好?

可转债&#xff0c;全称可转换债券&#xff0c;指的是持有者可以在特定时期、按特定条件&#xff0c;将其转换为特定数量的另一种证券的债券。这种债券可以转换成公司的普通股票。 如果债券持有人看好发债公司股票增值潜力&#xff0c;在宽限期之后可以行使转换权&#xff0c;…

SOLIDWORKS PDM—中央卡列表

SOLIDWORKS产品数据管理 (PDM) 解决方案可帮助您控制设计数据&#xff0c;并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional&#xff0c;您的团队能够&#xff1a;1. 安全地存储和索引设计数据以实现快速检索&#xff1b;2. 打消关于…

条码扫描器

介绍 条码扫描器&#xff0c;又称为条码阅读器、条码扫描枪、条形码扫描器、条形码扫描枪及条形码阅读器。它是用于读取条码所包含信息的阅读设备&#xff0c;利用光学原理&#xff0c;把条形码的内容解码后通过数据线或者无线的方式传输到电脑或者别的设备。广泛应用于超市、物…

2024年腾讯云4核8G12M轻量应用服务器测评,2月更新

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

搜维尔科技:分析OptiTrack光学动作捕捉应用领域!

虚拟制作 当今虚拟制作阶段低延迟、超精确摄像机跟踪的事实上的标准。 用于运动科学的 OptiTrack OptiTrack 系统提供世界领先的测量精度和简单易用的工作流程&#xff0c;为研究人员和生物力学师的研究提供理想的 3D 跟踪数据。对所有主要数字测力台、EMG 和模拟设备的本机即…

Kernelized Correlation Filters KCF算法原理详解(阅读笔记)(待补充)

KCF 目录 KCF预备知识1. 岭回归2. 循环移位和循环矩阵3. 傅里叶对角化4. 方向梯度直方图&#xff08;HOG&#xff09; 正文1. 线性回归1.1. 岭回归1.2. 基于循环矩阵获取正负样本1.3. 基于傅里叶对角化的求解 2. 使用非线性回归对模型进行训练2.1. 应用kernel-trick的非线性模型…

机构如何搭建一个在线课程教学平台?

随着数字化教育的兴起&#xff0c;越来越多的教育机构开始考虑建立自己的在线课程教学平台。这一趋势不仅顺应了时代的发展&#xff0c;而且为教育行业带来了诸多便利和优势。构建一个在线教学平台可以帮助机构拓宽服务范围、提升教学质量、增强学生体验&#xff0c;并且能够有…

【机器学习】数据清洗——基于Pandas库的方法删除重复点

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…