Vue2电商前台项目(一):项目前的初始化及搭建

一、项目初始化

创建项目:sudo vue create app

1.项目配置

(1)浏览器自动打开

在package.json文件中,serve后面加上 --open

"scripts": {"serve": "vue-cli-service serve --open","build": "vue-cli-service build","lint": "vue-cli-service lint"},

(2)eslint校验工具的关闭

在根目录下的vue.config.js加上:

module.exports = defineConfig({transpileDependencies: true,//关闭eslintlintOnSave:false
})

(3)文件夹目录的简写方式,配置别名

就是不用再../找东西了,直接@代表src文件夹,在jsconfig.json

{"compilerOptions": {"target": "es5","module": "esnext","baseUrl": "./","moduleResolution": "node","paths": {"@/*": ["src/*"]},"lib": ["esnext","dom","dom.iterable","scripthost"]}
}

现在默认就是配好了的

二、项目的路由分析及搭建

1.项目的路由分析

vue-router
前端所谓路由:KV键值对。
key:URL(地址栏中的路径)
value:相应的路由组件
注意:项目上中下结构
路由组件:
Home首页路由组件、Search路由组件、login登录路由、Register注册路由非路由组件:
Header【在首页、搜索页】
Footer【在首页、搜索页】,但是在登录页面是没有

2.开发项目的步骤

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

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

3.非路由组件的完成

静态页面组件的拆分Header、Footer组件,组件文件夹里分别放index.vue和images文件夹来存放组件用到的图片,最后在App.vue引入组件

安装能够使用less样式:终端输入npm i less-loader@6并且style语言lang设置为less

<style lang="less">

components文件夹就ok了

4.路由组件的搭建

路由组件Home、Search、login、Register组件放在pages文件夹里,分别创建四个文件夹,文件夹里创建一个index.vue

(1)配置路由

Vue2安装vue-router:npm i vue-router@3

首先新建一个router文件夹(src下),新建index.js文件,vue.router是vue的一个插件,我们得引入Vue和VueRouter然后use一下

router/index.js:

//配置路由的地方
import Vue from 'vue'
import VueRouter from 'vue-router'
//使用插件
Vue.use(VueRouter)
//引入路由组件
import Home from '../pages/Home'
import Login from '../pages/Login'
import Search from '../pages/Search'
import Register from '../pages/Register'
//配置插件
export default new VueRouter({//配置路由routes:[{path:'/Home',component:Home,},{path:'/Register',component:Register,},{path:'/Login',component:Login,},{path:'/Search',component:Search,},]
})

注意配置路由是routes不是routers!

(2)使用路由组件

回到入口文件main.js进行注册

//引入路由
import router from './router'new Vue({render: h => h(App),router//KV一致省略V//注册路由信息:当这里书写router的时候,组件身上都拥有$route,$router
}).$mount('#app')

然后就能到App.vue当中使用了,写完router-view之后,你想找home路由组件的页面就直接在路径输入8080/#/home就可以显示了

<div><Header></Header><!-- 路由组件出口的地方 --><router-view></router-view><Footer></Footer></div>

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

(3)路由组件与非路由组件的区别

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

(4)重定向

我们平时打开网页8080应该就得呈现首页。

当项目跑起来的时候,访问/,立马给它定向到首页

        {path:'*',// *或/都行redirect:"/home"},

(5)路由跳转的两种方式

声明式导航:router-link,可以进行路由的跳转
编程式导航:【push|replace】,可以进行路由跳转,声明式导航能做的,编程式导航都能做,但是编程式导航除了可以进行路由跳转,还可以做一些其他的业务逻辑。

声明式router-link:
            <!-- 声明式导航,得加to --><router-link to="/login">登录</router-link><router-link to="/register" class="register">免费注册</router-link>

原来用的是a标签,herf改为to,

编程式导航:比如说那个input表框,点击需要得到用户输入的信息传参什么的就用编程式
<button class="sui-btn btn-xlarge btn-danger" type="button" @click="goSearch">搜索
</button>
methods: {//搜索按钮的回调函数,需要向search路由进行跳转goSearch(){this.$router.push('/search')}},

三、Footer组件的显示和隐藏——路由元信息

登陆或者注册的时候底下的footer是没有的,显示或隐藏组件:v-if / v-show

v-show更好用,就是操作样式显不显示类似display,v-if会频繁的操作dom

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

App.vue:

<!-- 在home、search显示 --><Footer v-show="$route.path=='/home'||$route.path=='/search'"></Footer>

但是如果要写的组件很多的话,这样就不太好了

2.路由元信息

就是那个meta,route里的属性是特定的不能自己命名

routes:[{path:'/Home',component:Home,meta:{show:true}},{path:'/Search',component:Search,meta:{show:true}},
<Footer v-show="$route.meta.show"></Footer>

四、路由传参

1.复习路由跳转的两种方式

(1)声明式导航:router-link(务必要有to属性),可以实现路由的跳转
(2)编程式导航:利用的是组件实例的$router.push|replace方法,可以实现路由的跳转。(可以书写自己的业务,业务完成之后再跳转)

2.路由传参的参数有几种写法?

params参数:属于路径当中的一部分,需要注意,在配置路由的时候,需要占位
query参数:不属于路径当中的一部分,类似于ajax中的queryString /home?k=v&kv=,不需要占位

(1)字符串形式

header/index.vue收集文本框的数据用v-model,给input表框加上

          <inputtype="text"id="autocomplete"class="input-error input-xxlarge"v-model="keyword"/>

这个keyword是表单的数据,声明一下

data(){return{keyword:''}},

事件为点击之后把数据传过去,就得有个点击事件

         <buttonclass="sui-btn btn-xlarge btn-danger"type="button"@click="goSearch">
methods: {//路由传递参数//第一种:字符串形式goSearch() {this.$router.push("/search/"+this.keyword)},},

数据是路由跳转传过来的,需要进行占位,index.js:(传的params参数)

        {path:'/search/:keyword',component:Search,meta:{show:true}},

传params参数和query参数(大写的):

goSearch() {this.$router.push("/search/"+this.keyword+"?k="+this.keyword.toUpperCase())},

(2)模版字符串

//模版字符串
this.$router.push(`/search/"${this.keyword}?k=${this.keyword.toUpperCase()}`)

(3)对象写法

注意:如果是路由跳转传参、传的还是对象,而且是params参数,就需要给路由命名

//对象写法
this.$router.push({
name:"search",params:{keyword:this.keyword},query:{k:this.keyword.toUpperCase()}
})

不能是path形式,得是name写法

3.路由传参的面试题

1:路由传递参数(对象写法)path是否可以结合params参数一起使用?

不能。路由跳转传参的时候,对象的写法可以是name、path形式,但是需要注意的是,path这种写法不能与params参数一起使用的。

2:如何指定params参数可传可不传?

路由要求传递params参数,但是你就不传递params参数,发现一件事情,URL会有问题的
指定params参数可以传递、或者不传递,在配置路由的时候,在占位的后面加上一个问号【params可以传递或者不传递】

path:'/search/:keyword?'

不仅是params参数没有了,url也错了

如果占位后面加了?,url正确有search,就是params参数没有

3:params参数可以传递也可以不传递,但是如果传递是空串,如何解决?

this.$router.push({
name:"search",params:{keyword:''||undefined},query:{k:this.keyword.toUpperCase()}
})

传空串也会导致url错误

4:路由组件能不能传递props数据?

(1)布尔值

路由组件只能传props,而且只能传params参数

            name:'search',path:'/search/:keyword',component:Search,//布尔值写法:paramsprops:true,meta:{show:true}

为true,把params参数作为路由组件身上的属性

传递了search就得接收,接收完之后可以直接在页面写{{keyword}}

props:['keyword']
(2)对象写法(用的也不多)
//对象写法props:{a:1,b:2},

(3)函数写法

可以把params参数、query参数,通过props传递给路由组件

//函数写法props:($route)=>{return {keyword:$route.params.keyword,k:$route.params.k}},meta:{show:true}

简写方式把{}当函数体了,会报错

正确简写方式:

props:($route)=>({ keyword:$route.params.keyword,k:$route.params.k}),

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

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

相关文章

我与C++的爱恋:类与对象(一)

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&…

Tomcat安装部署及JavaEE项目创建

一.Tomcat下载 官网链接 选择自己需要的版本&#xff08;本次采用Tomcat10&#xff09;下载 二.文件结构 解压下载的文件&#xff0c;其主要文件目录如下&#xff1a; 三.启动Tomcat 找到bin目录下的startup.bat文件&#xff0c;双击运行 启动后出现弹窗&#xff0…

【数据结构】初识数据结构与复杂度总结

前言 C语言这块算是总结完了&#xff0c;那从本篇开始就是步入一个新的大章——数据结构&#xff0c;这篇我们先来认识一下数据结构有关知识&#xff0c;以及复杂度的相关知识 个人主页&#xff1a;小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1.什么是数据结构 2.…

Java 面向对象(基础)

1、面向对象的概述及两大要素&#xff1a;类与对象 1. 面向对象内容的三条主线&#xff1a; - Java类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 - 面向对象的特征&#xff1a;封装、继承…

JMeter+Grafana+influxdb 配置出现transaction无数据情况解决办法

JMeterGrafanainfluxdb 配置出现transaction无数据情况解决办法 一、问题描述二、解决方法 一、问题描述 如下图所示出现application有数据但是transaction无数据情况 二、解决方法 需要做如下设置 打开变量设置如下图打开两个选项 然后再进行后端监听器的设置 如下图所…

数据结构进阶篇 之 【交换排序】(冒泡排序,快速排序递归、非递归实现)

当你觉的自己不行时&#xff0c;你就走到斑马线上&#xff0c;这样你就会成为一个行人 一、交换排序 1.冒泡排序 BubbleSort 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 冒泡排序的特性总结 2.快速排序 QuickSort 2.1 基本思想 2.2 递归实现 2.2.1 hoare版 2.2.2 …

NoSQL之Redis

目录 一、关系型数据库与非关系型数据库 1.关系数据库 2.非关系数据库 2.1非关系型数据库产生背景 3.关系型数据库与非关系型数据区别 &#xff08;1&#xff09;数据存储方式不同 &#xff08;2&#xff09;扩展方式不同 &#xff08;3&#xff09;对事物性的支持不同 …

微服务(基础篇-008-es、kibana安装)

目录 05-初识ES-安装es_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p81&vd_source60a35a11f813c6dff0b76089e5e138cc 1.部署单点es 1.1.创建网络 1.2.加载镜像 1.3.运行 2.部署kibana 2.1.部署 2.2.DevTools 3.安装IK分词器 3.1.在线安装ik…

装修避坑指南 | 定制家具你遇到过哪些坑?福州中宅装饰,福州装修

定制家具时可能会遇到以下一些常见问题&#xff1a; 尺寸不准确&#xff1a;由于定制家具需要按需定制&#xff0c;对尺寸的要求很高。如果尺寸不准确&#xff0c;很可能会导致安装困难或者家具不符合空间需求。 材料质量差&#xff1a;有些厂家可能会使用质量较差的材料来降…

[AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步

目录 关键词平台说明背景一、implicit synchronization1.1 Write requests 流程 (NvM_WriteBlock)1.2 Read requests 流程 (NvM_ReadBlock)1.3 Restore default requests 流程 (NvM_RestoreBlockDefaults)1.4 Multi block read requests 流程 (NvM_ReadAll)1.5 Multi block wri…

【Python系列】 yaml中写入数据

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

WEB漏洞-文件上传之基础及过滤方式

目录 案例1&#xff1a;百度搜索关键词&#xff0c;找到可能存在漏洞的网页 案例2&#xff1a;不同格式下的文件类型后门测试 案例3&#xff1a;配合解析漏洞下的文件类型后门测试 案例4&#xff1a;本地文件上传漏洞下的文件类型后门测试 案例5&#xff1a;某CVE漏洞利用…

MySQL索引原理

MySQL索引原理 1、Innodb中的B树是怎么产生的呢? 背景1.1、mysql索引使用B树&#xff0c;为什么&#xff1f;1.2、主键索引图示1.3、mysql最好使用自增ID&#xff1a;为什么呢&#xff1f;1.4、高度为3的B树能存多少条数据&#xff1f;a、假设2层b、假设3层 2、索引采用什么数…

从0到1构建uniapp应用-store状态管理

背景 在 UniApp的开发中&#xff0c;状态管理的目标是确保应用数据的一致性&#xff0c;提升用户体验&#xff0c;并简化开发者的工作流程。通过合理的状态管理&#xff0c;可以有效地处理用户交互、数据同步和界面更新等问题。 此文主要用store来管理用户的登陆信息。 重要…

Dubbo入门项目搭建【Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0】

B站学习视频 基于Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0、Jdk1.8 搭建的Dubbo学习Demo 一、前置安装 1-1、Nacos 安装 我本地是通过docker-compose来安装nacos的&#xff0c;如果需要其它方式安装可以去百度找下教程&#xff0c;版本是2.3.0的 docker…

新模因币MVP正在受到关注,预计将超越 SHIB 和 BONK

随着一种新的模因币TRUMP进入爆发式增长&#xff0c;加密市场开始对这种基于选举和权利的模因币充满了期待。并引发了人们对过去“玩笑式”模因币未来的疑问&#xff0c;因为当人们审视区块链与现实的意义时&#xff0c;发现&#xff08;SHIB) 和 Bonk (BONK) 等成熟模因币这样…

常见滤波算法(PythonC版本)

简介 受限于MCU自身的ADC外设缺陷&#xff0c;精度和稳定性通常较差&#xff0c;很多场景下需要用滤波算法进行补偿。滤波的主要目的是减少噪声与干扰对数据的影响&#xff0c;让数据更加接近真实值。 一阶低通滤波 一阶低通滤波是一种信号处理技术&#xff0c;用于去除信号中…

在project模式下自定义Implementation Strategies

Implementation Settings定义了默认选项&#xff0c;当要定义新的implementation runs时会使用这些选项&#xff0c;选项的值可以在Vivado IDE中进行配置。 图1展示了“Settings”对话框中的“implementation runs”对话框。要从Vivado IDE打开此对话框&#xff0c;请从主菜单中…

网络通信(一)

网络编程 互联网时代&#xff0c;现在基本上所有的程序都是网络程序&#xff0c;很少有单机版的程序了。 网络编程就是如何在程序中实现两台计算机的通信。 Python语言中&#xff0c;提供了大量的内置模块和第三方模块用于支持各种网络访问&#xff0c;而且Python语言在网络…

QT实现NTP功能

一.NTP基础 1.NTP定义 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是由RFC 1305定义的时间同步协议&#xff0c;用于分布式设备&#xff08;比如电脑、手机、智能手表等&#xff09;进行时间同步&#xff0c;避免人工校时的繁琐和由此引入的误…