关于本站
“最难不过坚持”
本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作
有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339
2712
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不好用
文章标签更多
打开边栏(ESC)
关闭边栏(ESC)
vue尚品汇-轮播图,mockjs模拟数据
mockjs官网:http://mockjs.com/
一,mockjs模拟数据
1,mockjs安装(加上-D,开发环境需要,生产环境不需要)
npm i mockjs -D
2,在src文件夹下建立mock文件夹
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'
二,使用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',
},
})
})
}
}
赏
相关推荐
接口返回request failed with status code 500错误
接口返回request failed with status code 500错误
登录界面,验证账号密码成功,但是返回500错误
可能原因:linux服务器,用tp5搭建的后台及接口,会生成一部分缓存文件,但是linux默认没有权限创建数据,所以,只要在缓存文件夹runtime添加写的权限即可
解决errors and 0 warnings potentially fixable with the `--fix` option.问题
解决errors and 0 warnings potentially fixable with the `--fix` option.问题
项目正常运行,就是有这个提示
找到.eslintrc.js注释掉// 'eslint:recommended'
评论加载中...
后一篇: vue尚品汇-楼层Floor组件