• Vuex与Axios


    axios

    相当于jquery ajax

    官网:https://www.kancloud.cn/yunye/axios/234845

    将axios挂载到vue的原型上,那么在各个组件中都能使用,因为面向对象(继承)

    axios使用:

    main.js

    //引入axios
    import Axios from 'axios'
    //将axios挂载到 Vue原型上
    Vue.prototype.$https = Axios
    ​
    //设置公共的url
    Axios.defaults.baseURL = 'https://www.xxx.com/api/v1/';

    Home.vue

    methods:{
                //获取 分类列表的数据
                getCategoryList(){
                    this.$https.get('course_sub/category/list/')
                    .then((res)=>{
                        console.log(res);
                        var data = res.data;
                        if(data.error_no === 0){
                            this.categoryList = data.data;
                            let obj = {
                                id:0,
                                name:'全部',
                                category:0
                            }
                            this.categoryList.unshift(obj);
                            // 数组  删除任意一个指定的元素
                            //指定数组中的索引 删除指定的元素  数组.splice(起始位置,删除的个数)
                        }
                    })
                    .catch((err)=>{
                        console.log('获取列表失败',err)
                    })
                },

    但是通常我将所有的请求都放在restful的api.js下,这样也方便后期维护

    api.js

    import Axios from 'axios'
    //设置公共的url
    Axios.defaults.baseURL = '公共url';
    const categoryListUrl = '/course_sub/category/list/';
    const courseListUrl = '/courses/?sub_category=';
    const courseDetailUrl ='/coursedetail/?courseid=';
    //请求1
    export function categoryList(){
        return  Axios.get(categoryListUrl).then(res=>res.data)
    }
    //请求2
    export function courseList(categoryId){
        return  Axios.get(`${courseListUrl}${categoryId}`).then(res=>res.data)
    }
    //请求3
    export function courseDetail(courseId){
        return  Axios.get(`${courseDetailUrl}${courseId}`).then(res=>res.data)
    api.js

    main.js

    //引入axios
    import Axios from 'axios'
    import * as api from './restful/api'
    //将axios挂载到api上
    Vue.prototype.$https = api;
    main.js

    vue中的请求

    ajaxsent(num = 0) {
                    //对应api中的相应的请求
                    this.$https.courseList(num)
                        .then((res) => {
                            if (res.error_no === 0) {
    
                                this.msg = res.data;
                                this.msg.forEach((element, index) => {
                                    element.colorName = this.colorList[index]
                                })
    
                            }
                        })
                        .catch((err) => {
                            console.log('获取列表失败', err)
                        });
                    this.index_id = num
                },
    vue

    Vuex

    下载

    npm i vuex -S

    使用

    main.js

    import Vuex from 'vuex'
    Vue.use(Vuex)
    const store = new Vuex.Store({
      state:{
        num:1,
        questionList:[]
      },
      mutations:{
        setMutaNum(state,val){
          console.log(val)
          state.num+=val
        },
        setMutaAsync:function(state,val){
         state.num+=val
        
        },
        course_questions(state,data){
          state.questionList = data;
         
        }
      },
      actions:{
        setActionNum(context,val){
          //Action 提交的是 mutation,而不是直接变更状态。
          context.commit('setMutaNum',val)
        },
        setActionAsync:function(context,val){
          setTimeout(()=>{
            context.commit('setMutaAsync',val)
          },1)
         
         },
         course_questions(context,courseId){
           //异步  aixos 异步
           Axios.get(`course_questions/?course_id=${courseId}`)
           .then((res)=>{
            console.log(res)
            let data = res.data.data;
            context.commit('course_questions',data)
           })
           .catch((err)=>{
            console.log(err)
           })
         }
      }
    })

    xx.vue

    export default {
            name:"CourseDetail",
            created(){
                console.log(this.$route.params.courseId)
                this.$store.dispatch('course_questions',this.$route.params.courseId)
            },
            computed:{
                questionList(){
                    return this.$store.state.questionList
                }
            }
        }

     

     

     

     

     

     

     

  • 相关阅读:
    备忘录模式
    观察者模式
    状态模式
    模板方法模式
    策略模式
    装饰者模式
    访问者模式
    工作那些事(二十七)项目经理在项目中是什么角色?
    工作那些事(二十六)个人和团队
    工作那些事(二十五)项目经理与产品经理
  • 原文地址:https://www.cnblogs.com/jiaqi-666/p/9409355.html
Copyright © 2020-2023  润新知