Vue处理类似Search页面多参数请求


首先我们要获取所有的参数列表,给参数列表初始化

data(){
      return {
        searchParams:{
          //一级分类ID
          category1Id:"",
          //二级分类ID
          category2Id:"",
          //三级分类ID
          category3Id:"",
          //分类名称
          categoryName:"",
          //搜索关键字
          keyword:"",
          //排序规定
          order:"",
          //页码数
          pageNo:1,
          //每页多少数据
          pageSize:10,
          //平台售卖属性操作带的参数
          props:[],
          //品牌
          trademark:""
        }
      }
    },

需要在beforeMount()整合路由里的参数,这里可以一条条赋值,但是更好的方法肯定是通过Object.assgin合并对象

 beforeMount(){
      //object.assign 合并对象
      Object.assign(this.searchParams,this.$route.query,this.$route.params)
    },

因为别的地方也需要发送请求,所以我们需要把发送请求的代码封装成函数,方便调用

    methods:{
      //封装成函数,发送请获取Search数据、根据参数不同返回不同的数据进行展示
      getSearchData(){
        this.$store.dispatch('getSearchInfo',this.searchParams)
      }
    },

页面加载前发送请求,mounted()

	this.getSearchData();

至此,页面能通过路由参数搜索返回数据,但是有一个问题,就是路由参数改变的时候,页面并不会改变,因为我们仅仅在页面加载完成的时候发送了一次请求,所以我们需要在路由改变的时候去发送请求:对头,这会就得用上watch去监听路由了。

    //搜素条件不同,路由信息也会发生变化,通过监听路由信息的改变,再次发送请求
    watch:{
      //监听路由
      $route(newValue,oldValue){
        //合并路由参数
        Object.assign(this.searchParams,this.$route.query,this.$route.params);
        //发送请求
        this.getSearchData();
        //请求完毕应该清空分类id,方便下一次搜索,修改的是searchParams,所以$route并不会变
        this.searchParams.category1Id = '';
        this.searchParams.category2Id = '';
        this.searchParams.category2Id = '';
      }
    }
  }