前端Vue项目——课程详情页面实现

本文详细介绍了如何在Vue项目中实现课程详情页面,包括路由跳转、数据获取与渲染、套餐区样式切换,以及购物车功能。在路由部分,使用Vue Router进行编程式导航;在详情页面,通过axios获取数据并动态绑定;在套餐区实现了样式切换;购物车功能中,添加了未选中套餐提示和未登录用户的登录跳转。
摘要由CSDN通过智能技术生成

一、详情页面路由跳转

  应用 Vue Router 编程式导航通过 this.$router.push() 来实现路由跳转。

1、绑定查看详情事件

  修改 src/components/Course/Course.vue 文件,给课程 div 绑定查看详情事件。

<div class="courseList">
    <div class="detail" v-for="(course, index) in courseDetail" :key="course.id" @click="detailHandler(course.id)">
        <div class="head">
            <img :src="course.course_img" alt="" class="backImg">
            <!-- 背景色:行内样式优先显示 -->
            <b class="mask" :style="{background: course.bgColor}"></b>
            <p>{
   { course.name }}</p>
        </div>

  v-on,缩写 @ ,绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。

2、定义详情事件

methods: {
    // 课程详情时间操作
    detailHandler(id) {
        this.$router.push({
            name: "course.detail",
            params: {
                detailId: id,
            }
        })
    },

  注意:path只能和query搭配使用,name可以和params/query搭配使用,使用params传参只能使用name进行引入。

3、定义新的路由规则

  在 src/router/index.js 添加如下内容:

import CourseDetail from '@/components/Course/CourseDetail'

// 配置路由规则
export default new Router({
  linkActiveClass: 'is-active',
  mode: 'history',   // 改为history模式
  routes: [
    //
    // 课程详情,路由:course/detail/web/3
    {
      path: '/course/detail/web/:detailId',   // 动态匹配
      name: 'course.detail',       // 路由名称
      component: CourseDetail      // 对应组件
    }
  ]
})

  要把某种模式匹配到的所有路由,全部映射到同个组件。比如这里是课程详情组件,但是各个不同的课程有不同的 id,且都要用这个组件来渲染。那么可以在vue-router的路由路径中使用”动态路径参数“(dynamic segment)来实现这个效果。

  一个“路径参数”使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。于是,我们可以更新 CourseDetail 的模板,输出当前课程的 ID:

<template>
  <div>
    CourseID:{
    {
    $route.params.detailId}}
  </div>
</template>

<script>
  export default {
    name: "CourseDetail",
    data() {
      return {

      };
    },
  };
</script>

  页面显示效果如下所示:

  

二、课程详情页面实现

1、课程详情顶部布局和样式

<template>
  <div class="wrap">
    <div class="web-course-banner">
      <div class="container">
        <div class="title">
          <img src="../../../static/images/play.png" height="67" width="67" alt="">
          <h1 class="course-title">Django框架学习</h1>
        </div>
        <span class="course-text">Python语言下最强大优秀的WEB框架从入门到进阶</span>
        <div class="course-list">
          <ul>
            <li class="detail-item">
              难度:初级
            </li>
            <li class="sep"></li>
            <li class = detail-item>时长:32小时</li>
            <li class="sep"></li>
            <li class = detail-item>学习人数:632人</li>
            <li class="sep"></li>
            <li class = detail-item>评分 10.0</li>
          </ul>
        </div>
      </div>
    </div>
    <!-- 代码略 -->
  </div>
</template>

<style lang="css" scoped>
  .wrap{
    
    width: 100%;
  }
  .web-course-banner{
    
    width: 100%;
    height: 512px;
    background: url(../../../static/images/web-banner.1402933.png) no-repeat;
    background-size<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值