vue尚品汇-轮播图,mockjs模拟数据
taotaoit Vue 2022-12-14 954 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

7440756 2655 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)

vue尚品汇-轮播图,mockjs模拟数据

mockjs官网:http://mockjs.com/

一,mockjs模拟数据

1,mockjs安装(加上-D,开发环境需要,生产环境不需要)

npm i mockjs -D

2,在src文件夹下建立mock文件夹

from clipboard

3,准备模拟的数据
把mock数据需要的图片放置于public文件夹中!
scr/mock 文件夹下的 banner.json

[
  {
    "id": "1",
    "imgUrl": "/images/banner1.jpg"
  },
  {
    "id": "2",
    "imgUrl": "/images/banner2.jpg"
  },
  {
    "id": "3",
    "imgUrl": "/images/banner3.jpg"
  },
  {
    "id": "4",
    "imgUrl": "/images/banner4.jpg"
  }
]
4,mockServe.js文件 
// 先引入mockjs模块
import Mock from 'mockjs'

// 将JSON数据引入进来 [JSON数据格式根本没有对外暴露,但是可以引入]
// webpack默认对外暴露的:图片、JSON数据格式
import banner from './banner.json'
import floor from './floor.json'

/* 
    Mock数据
    - 第一个参数:请求地址
    - 第二个参数:请求数据
*/
Mock.mock('/mock/banner', {code:200,data:banner}) // 模拟首页大的轮播图的数据
Mock.mock('/mock/floor', {code:200, data:floor}) // 

5,回到入口文件(根目录src下的main.js),引入mockserve.js

import '@/mock/mockServe'

from clipboard

二,使用axios进行二次封装
1,在src的文件下的api文件夹下创建mockAjax.js文件 进行二次封装,封装以后需暴露

//对axios进行二次封装,将刚才下载好的axios导入进来
import axios from "axios";
import nprogress from "nprogress";
import 'nprogress/nprogress.css'

//1.利用axios对象的方法create,去创建一个axios实例
//2.requests就是axios,只不过稍微配置一下
const requests = axios.create({
	//配置对象
	//基础路径,发请求的时候,路径当中会出现api,不用你手写
	baseURL:'/mock',
	//请求时间超过5秒
	timeout:5000
});
//请求拦截器:在发请求之前,请求拦截器可以检测到,可以在请求发出去之前做一些事情
requests.interceptors.request.use((config)=>{
	// 开启进度条
	nprogress.start()
 	//config是个配置对象,对象里面有一个属性很重要,headers请求头
 	return config;		
});
 
//响应拦截器:包含两个函数(一个是成功返回的函数,一个是失败的返回的函数)
requests.interceptors.response.use((res)=>{
	// 关闭进度条
	nprogress.done()
	//成功的回调函数:服务器响应数据回来以后,响应拦截器可以检测到,可以做一些事情。
	return res.data;	
},(error)=>{
	return promise.reject(new Error('faile'))
});
//对外暴露requests(axios的二次封装)
export default requests;

2,在src文件夹下的api文件夹下创建index.js文件用于书写获取mock数据的方法

//导入刚才写好的axios二次封装的requests
import requests from "./ajax";
import mockRequests from "./mockAjax"
//三级联动接口
///api/product/getBaseCategoryList get 无参数
//发请求:axios发请求返回结果promise对象
export const reqCategoryList = ()=>{
	//由于前面配置了基础路径,所以不用加/api
	return requests({url:'/product/getBaseCategoryList',method:'get'})
}

// 获取轮播图,mockjs模拟数据
export const reqBannerList = ()=>{
	// return mockRequests.get('/banner');
	return mockRequests({url:'/banner',method:'get'})
}
三,请求数据

1,在ListContainer组件中,派发actions:通过Vuex发起ajax请求,将数据存储在仓库中

import {mapState} from 'vuex'

export default {
  name:'ListContainer',
	mounted(){
		// 派发actions:通过Vuex发起ajax请求,将数据存储在仓库中
		this.$store.dispatch('getBannerList')
	},
	computed:{
		...mapState({
			bannerList:(state)=>{
				return state.home.bannerList
			}
		})
	},
}
2,在vuex仓库store/home/index.js书写获取数据的三连环
import {reqCategoryList,reqBannerList} from '@/api'

const state = {
  categoryList:[],
  bannerList:[]
}
const mutations = {
  CATEGORYLIST(state,categoryList){
    state.categoryList = categoryList
  },
  GETBANNERLIST(state,bannerList){
    state.bannerList = bannerList
  }
}
const actions = {
  // 产品分类
  async categoryList({commit}){
    let result = await reqCategoryList()
    if(result.code == 200){
      commit('CATEGORYLIST',result.data)
    }
  },
  // 轮播图
  async getBannerList({commit}){
    let result = await reqBannerList()
    if(result.code == 200){
      commit('GETBANNERLIST',result.data)
    }
  }
}
const getters = {}

export default {
  state,
  mutations,
  actions,
  getters
}

四,轮播图实现

1,安装swiper

nmp i swiper@5

2,引入swiper

//引入Swiper
import Swiper from 'swiper'
//引入Swiper样式-多个地方用到swiper,swiper.css可以放到main.js中引入
import 'swiper/css/swiper.css'
3,初始化swiper实例
watch: {
     // 在new swiper实例之前, 页面中结构必须已经存在
    bannerList(newValue, oldValue) {
      this.$nextTick(() => {
        // 当执行这个回调的时候: 保证服务器的数据一定回来了(这时候v-for已经执行完毕了)
        var mySwiper = new Swiper(document.querySelector(".swiper-container"), {
          loop: true, // 循环模式选项
					
          // 如果需要分页器
          pagination: {
            el: '.swiper-pagination',
            clickable: true
          },
          // 如果需要前进后退按钮
          navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev',
          },
        })
      })
    }
  }
from clipboard

版权声明:本站原创文章,允许自由转载。

相关推荐
接口返回request failed with status code 500错误
Vue | 2023-02-20 3213
接口返回request failed with status code 500错误 登录界面,验证账号密码成功,但是返回500错误 可能原因:linux服务器,用tp5搭建的后台及接口,会生成一部分缓存文件,但是linux默认没有权限创建数据,所以,只要在缓存文件夹runtime添加写的权限即可
解决errors and 0 warnings potentially fixable with the `--fix` option.问题
Vue | 2023-06-08 2369
解决errors and 0 warnings potentially fixable with the `--fix` option.问题 项目正常运行,就是有这个提示 找到.eslintrc.js注释掉// 'eslint:recommended'
评论:0条
评论加载中...
发表评论