vue尚品汇-search组件
taotaoit Vue 2022-12-16 696 0
关于本站

“最难不过坚持”

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

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

6460837 2613 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尚品汇-search组件

1,在api获取数据接口 (也包括了之前的轮播图,三级联动等等, 全部复制过来看的清除一点)

src\api\index.js第一次带参数

//导入刚才写好的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'})
}
//Search组件,获取商品列表接口,params是参数,post方式传递
export const reqSearchList = (params)=>{
	//由于前面配置了基础路径,所以不用加/api
	return requests({url:'/list',method:'post',data:params})
}

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

// 获取楼层,mockjs模拟数据
export const reqFloorList = ()=>{
	return mockRequests({url:'/floor',method:'get'})
}
from clipboard

2,在仓库(store)发送请求, 不过之前都是在home仓库中进行, 这里要在search里写src\store\search\index.js

import { reqSearchList } from "@/api"

const state = {
  searchList:{}
}
const mutations = {
  GETSEARCHLIST(state,searchList){
    state.searchList = searchList
  },
}
const actions = {
  // 产品列表
  async getSearchList({commit},params={}){
    let result = await reqSearchList(params)
    // console.log(result);
    if(result.code == 200){
      commit('GETSEARCHLIST',result.data)
    }
  }
}
// 计算属性
// getters主要作用:简化仓库中的数据,将来组件中获取数据方便
const getters = {
  // 当前形参state,是当前仓库中的state,不是大仓库中的state
  goodsList(state){
    return state.searchList.goodsList || [] // 万一网络慢,没有返回数据,至少给前端遍历的时候一个空数组[]
  },
  attrsList(state){
    return state.searchList.attrsList || []
  },
  trademarkList(state){
    return state.searchList.trademarkList || []
  }
}

export default {
  state,
  mutations,
  actions,
  getters
}
from clipboard

3,在组件内(search)派发action, 获取仓库数据src\pages\Search\index.vue

<script>
import {mapGetters} from 'vuex'
import SearchSelector from './SearchSelector'

export default {
  name:'Search',
  components:{
    SearchSelector
  },
  data() {
    return {
      searchParams:{
        // 1, 2, 3, 级分类的id, 从home跳转到search时传入
        category1Id: "",
        category2Id: "",
        category3Id: "",
        // 分类名字, 关键字
        categoryName: "",
        keyword: "",
        // 排序
        order: "",
        // 分页器, 代表当前是第几页
        pageNo: 1,
        // 代表每一个展示数据的个数
        pageSize: 3,
        // 平台售卖属性操作带的参数
        props: [],
        // 品牌
        trademark: "",
      }
    }
  },
  beforeMount() {  //在挂载之前合并参数-仅执行一次,参数变化多次搜索还得想别的办法
    // 复杂的写法
    // this.searchParams.category1Id = this.$route.query.category1Id;
    // this.searchParams.category2Id = this.$route.query.category2Id;
    // this.searchParams.category3Id = this.$route.query.category3Id;
    // this.searchParams.categoryName = this.$route.query.categoryName;
    // this.searchParams.keyword = this.$route.query.keyword;
    Object.assign(this.searchParams, this.$route.query, this.$route.params);
    // console.log(this.searchParams, this.$route.query, this.$route.params);
  },
  mounted() {
    // 放在挂载中,只会执行一次
    // this.$store.dispatch('getSearchList')
    // 所以需要把向服务器请求数据封装成一个函数,根据不同参数多次请求
    this.getData()
  },
  computed:{
    ...mapGetters(['goodsList'])
  },
  methods:{
    // 向服务器发送请求,获取search模块数据
    getData(){
      this.$store.dispatch('getSearchList',this.searchParams)
    }
  },
  // 数据监听: 监听组件实例身上的属性的属性值变化 
  watch: {
    // 监听路由的信息是否发生变化, 如果发生变化, 则再次发起请求
    $route(newValue, oldValue) {
      // 再次发请求之前整理带给服务器参数
      Object.assign(this.searchParams, this.$route.query, this.$route.params);
      // 在次发送 ajax请求
      this.getData()
      console.log(this.searchParams, this.$route.query, this.$route.params);  
      //如果下一次搜索时只有params参数,拷贝后会发现searchParams会保留上一次的query参数
      //所以每次请求结束后将相应参数制空
      this.searchParams.category1Id = ''
      this.searchParams.category2Id = ''
      this.searchParams.category3Id = ''
    },
  } 

}
</script>
from clipboard

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

相关推荐
接口返回request failed with status code 500错误
Vue | 2023-02-20 2638
接口返回request failed with status code 500错误 登录界面,验证账号密码成功,但是返回500错误 可能原因:linux服务器,用tp5搭建的后台及接口,会生成一部分缓存文件,但是linux默认没有权限创建数据,所以,只要在缓存文件夹runtime添加写的权限即可
vue项目npm run serve默认浏览器打开
Vue | 2022-11-16 1893
1、在vue项目中,输入命令行  npm run serve   浏览器实现自动打开功能,需要添加 在配置文件(package.json)中添加 --open 2、浏览器自动打开后,可能会出现网址0.0.0.0:8080页面错误,见图 3、解决方法: 在--open后面再加上--...
评论:0条
评论加载中...
发表评论