IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue学习Day18 跳转、请求数据、获取数据、滚到对应位置 -> 正文阅读

[JavaScript知识库]Vue学习Day18 跳转、请求数据、获取数据、滚到对应位置

想利用暑假时间好好学习一下vue,会记录每一天的学习内容。
今天是学习vue的第18天!

起起伏伏乃人生常态,继续加油~



1. 点击商品跳转到详情页

点击GoodsItem要跳转到详情页,我们可以给详情页配置一个对应路由
在这里插入图片描述

// index.js
const Detail = () => import('../views/detail/Detail.vue');

const routes = [
  {
    path: '/detail',
    component: Detail
  }
]

而且这里我们应该在跳转路由的时候传递一些参数,把点击的该商品的id传过去,传递参数有两种类型paramsquery,这里我用了params类型:

// index.js
{
  path: '/detail/:itemId',
  component: Detail
}
// GoodsItem.vue
methods: {
  itemClick() {
    // 跳转到详情页
    // 传递params类型参数
    this.$router.push("/detail/" + this.goodsItem.iid);
  }
}

在这里插入图片描述


2. 请求详情页数据

我们要在Detail.vue组件中获取到这个iid并且请求对应的数据

// Detail.vue
data() {
  return {
    iid: null
  }
},
created() {
  // 注意这里之所以是itemId,是因为我们路由配置中配的是path: '/detail/:itemId'
  this.iid = this.$route.params.itemId;
}

现在我们的iid中就保存了iid,接下来要根据这个iid发送网络请求
在这里插入图片描述

// detail.js
import {request} from  './request'

export function getDetailMessage(iid) {
  return request({
    url: '/detail',
    params: {
      iid
    }
  })
}

Detail.vue组件中中引入并调用getDetailMessage()方法:

created() {
  this.iid = this.$route.params.itemId;
  this.getDetailMessage(this.iid);
},
methods: {
  getDetailMessage(iid) {
    getDetailMessage(iid).then(res => {
      console.log(res);
    })
  }  
}

3. 详情页导航栏使用

NavBar组件实际上前面我们已经封装好了,这里直接往插槽里插我们需要的东西就ok了

<nav-bar>
  <template #left>
    <img @click="backClick" src="../../assets/img/common/back.svg" alt="">
  </template>
  <template #center>
    <a href="javascript:;"
      v-for="(item, index) in title"
      :key="item"
      :class="{ activeTitle: currentIndex == index }"
      @click="titleClick(index)">
      {{ item }}
    </a>
  </template>
</nav-bar>
import NavBar from "../../components/common/navbar/NavBar.vue";

data() {
  return {
    title: ["商品", "参数", "评论", "推荐"],
    currentIndex: 0,
  }
},
components: {
  NavBar,
},
methods: {
  titleClick(index) {
    this.currentIndex = index;
  },  
  backClick() {
    // 点击返回
    this.$router.back();
  },
}

4. 轮播图展示

封装好的直接拿来用就行

Detail.vue

<swiper class="detail-swiper">
  <swiper-item
    v-for="item in topImgs"
    :key="item">
    <img :src="item" alt="" />
  </swiper-item>
</swiper>
import Swiper from "../../components/common/swiper/Swiper.vue";
import SwiperItem from "../../components/common/swiper/SwiperItem.vue";

export default {
  data() {
    return {
      topImgs: [],
    }
  },
  created() {
	this.iid = this.$route.params.itemId;
	this.getDetailMessage(this.iid);
  },
  methods: {
    getDetailMessage(iid) {
      getDetailMessage(iid).then((res) => {
      this.topImgs = res.data.result.itemInfo.topImages;
    });
  },  
}
}  

5. 商品详细数据的获取

我们的商品信息很复杂,我们应该整合数据到一个对象中,这里我们可以定义一个类

// detail.js
export class GoodsInfo {
  constructor(itemInfo, columns, services) {
    this.title = itemInfo.title
    this.desc = itemInfo.desc
    this.newPrice = itemInfo.price
    this.oldPrice = itemInfo.oldPrice
    this.discount = itemInfo.discountDesc
    this.columns = columns
    this.services = services
    this.realPrice = itemInfo.lowNowPrice
  }
}
import { GoodsInfo } from "../../network/detail";

data() {
  return {
    goods: {}
  }
},
methods: {
  getDetailMessage(iid) {
    getDetailMessage(iid).then((res) => {	  // new一个实例,将对应的参数传进去
      this.goods = new GoodsInfo(res.data.result.itemInfo,res.data.result.columns,res.data.result.shopInfo.services)
    });
  },
}

(展示的话再新建个组件,把我们对应的数据取出来然后写样式什么的)


6. 点击标题滚到对应位置

其实就是点击标题改变对应的scrollTop值,这个scrollTop值是各个子组件的offsetTop
给详情页的各个子组件设置ref值,用this.$refs.ref值获取到子组件实例

不能直接用this.$refs.ref值.offsetTop因为组件不是DOM元素,是没有offsetTop的,就需要通过$el获取组件中的DOM元素

也就是this.$refs.ref值.$el.offsetTop
注意这个获取应该放在页面中DOM元素都渲染完,数据都请求完,且图片都加载完之后,不然获取不到正确的offsetTop


  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:38:28  更:2021-07-23 10:41:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 8:40:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码