vue-路由钩子函数create、路由登录判断demo、商城页面布局demo---(图片的插入使用、地址栏logo的修改)

本文详细介绍了Vue.js应用程序的配置方法,包括如何通过.prettierrc文件统一代码风格,.eslintrc.js文件调整代码检查规则,以及在App.vue、Home.vue等组件中实现页面布局和功能。同时,探讨了路由设置、图片加载方式和用户登录验证流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述
新建一个文件" .prettierrc " 目的是防止js文件出现双引号和分号,它会使文件变成单引号并去掉分号

{
	"singleQuote":true,
	"semi":false,
}

在.eslintrc.js文件中的rules里加入一条规则,目的是让函数()前不空格,防止报错

"space-before-function-paren":"off"  这个单引号双引号都可以 "off"还可以替换成0

在这里插入图片描述
main.js文件不变
在这里插入图片描述
App.vue

<template>
  <div class="container">
    <div class="header">芒果商城</div>
    <router-view class="content"></router-view>
    <div class="footer">
      <div class="nav active">
        <i class="fa fa-home"></i>
        <span>首页</span>
      </div>
      <div class="nav">
        <i class="fa fa-fire"></i>
        <span>热卖</span>
      </div>
      <div class="nav">
        <i class="fa fa-shopping-cart"></i>
        <span>购物车</span>
      </div>
      <div class="nav">
        <i class="fa fa-user"></i>
        <span>我的</span>
      </div>
    </div>
  </div>
</template>

<style>
html,
body,
#app {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
}
.container {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}
.header {
  height: 40px;
  text-align: center;
  background-color: deeppink;
  color: white;
  line-height: 40px;
  font-weight: bolder;
}
.content {
  flex: 1;
  overflow: auto;
}
.footer {
  height: 50px;
  /* background-color: deeppink; */
  display: flex;
  align-items: center;
  justify-content: space-around;
}
.nav {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.nav i {
  font-size: 1.4rem;
}
.nav span {
  font-size: 0.6rem;
}
.nav.active {
  color: deeppink;
}
img {
  max-width: 100%;
}
</style>
保存自己想要当成地址栏的logo图片,然后到该链接http://www.bitbug.net/,将图片转换成ico格式

在这里插入图片描述
在这里插入图片描述
App.vue

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link>|
      <router-link to="/about">About</router-link>|
      <router-link to="/cart">购物车</router-link>|
      <router-link to="/user">我的</router-link>
    </div>
    <router-view />
  </div>
</template>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

#nav {
  padding: 30px;
}

#nav a {
  font-weight: bold;
  color: #2c3e50;
}

#nav a.router-link-exact-active {
  color: #42b983;
}
</style>

index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () =>
      import(/* webpackChunkName: "about" */ '../views/About.vue')
  },
  {
    path: '/user',
    name: 'User',
    meta: {
      needLogin: true
    },
    component: () => import('../views/User.vue')
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('../views/Login.vue')
  },
  {
    path: '/cart',
    name: 'Cart',
    meta: {
      needLogin: true
    },
    component: () => import('../views/Cart.vue')
  }
]

const router = new VueRouter({
  routes
})

router.beforeEach((to, from, next) => {
  /* console.group('before')
  console.log(to)
  console.log(from)
  console.log(next)
  next()
  console.groupEnd() */
  if (to.meta.needLogin) {
    if (localStorage.getItem('token')) {
      next()
    } else {
      next({ name: 'Login' })
    }
  } else {
    next()
  }
})
router.afterEach((to, from) => {
  /* console.group('after')
  console.log(to)
  console.log(from)
  console.groupEnd() */
})
export default router

User.vue

<template>
  <div class="login">
    <h1>用户中心</h1>
    <button @click="logOut">退出</button>
  </div>
</template>

<script>
export default {
  methods: {
    logOut() {
      localStorage.removeItem('token')
      this.$router.push({
        name: 'Login'
      })
    }
  }
}
</script>

<style>
</style>

Home.vue
图片的四种使用方法

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png" />
    <!-- 1️⃣  图片正确显示方法 -->
    <img src="../assets/images/xy.jpg" alt="赤色彗星" />
    <!-- 2️⃣3️⃣  图片正确显示方法 -->
    <img :src="xy" alt="赤色彗星" />
    <!-- 4️⃣  图片正确显示方法 -->
    <img :src="szb" alt="赤色彗星" />
    <HelloWorld msg="Welcome to Your Vue.js App" />
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
// 3️⃣
import xx from '../assets/images/xy.jpg' // 引入文件

export default {
  name: 'Home',
  components: {
    HelloWorld
  },
  data() {
    return {
      // 此写法是因为webpack中如果要引入资源文件需要使用require或者import
      //    此处使用的是file-loader加载器
      // 2️⃣xy: require('../assets/images/xy.jpg')
      // 3️⃣import xx from '../assets/images/xy.jpg'
      xy: xx
      // 4️⃣引入网络图片是可以直接引入的
      // szb:
      // 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2416142803,2306400110&fm=26&gp=0.jpg'
    }
  }
}
</script>

Login.vue

<template>
  <div class="login">
    <h1>登录页</h1>
    <button @click="loginHandle">登录</button>
  </div>
</template>

<script>
export default {
  methods: {
    // 登录成功之后把token写入本地存储
    loginHandle() {
      localStorage.setItem('token', '123')
      this.$router.push({
        name: 'User'
      })
    }
  }
}
</script>

<style>
</style>

cart.vue

<template>
  <div class="Cart">
    <h1>购物车</h1>
    <button @click="loginHandle">登录</button>
  </div>
</template>

<script>
export default {
  methods: {
    loginHandle() {
      this.$router.push({ name: 'Login' })
    }
  }
}
</script>

<style scoped>
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值