vue的router和axios

一、什麼是vue-router

是路由插件,單頁面應用路徑管理器,是將路徑和組件建立映射關係

二、模式

hash:(默認)錨點(#)就是在路徑上會有#,改變#後面的內容會顯示對應的dom
history:需要聲明(mode:history)路徑上沒有#

hash:有#號,微信分享頁面就會把"#"後邊的內容處理掉,和微信支付不適合,或路由加base:"./dist"

history:需要後端配置返回同一個index.html,不能返回404,不然會導致空白頁面,404頁面由前端配置

三、實例

import Vue from 'vue'
import Router from 'vue-router'
import { resolve } from 'path';
/* import Login from '@/pages/login/login'
import Main from '@/pages/main/main'
import Cbgn from '@/pages/chaobiao/cbgn/cbgn'
import Dagl from '@/pages/chaobiao/dagl/dagl'
import Ftgl from '@/pages/chaobiao/ftgl/ftgl'
import Nhtjfx from '@/pages/nhtj/nhtjfx/nhtjfx'
import Pdxtjc from '@/pages/zxjc/pdxtjc'
import Nhdb from '@/pages/nhdb/nhdb'
import Cbhz from '@/pages/cbgl/cbhz'
import Dqyxfx from '@/pages/yxfx/dqyxfx/dqyxfx'
import Gsbcz from '@/pages/xtgl/gsbcz/gsbcz'
import Byqcz from '@/pages/xtgl/byqcz/byqcz'
import Bmcz from '@/pages/xtgl/bmcz/bmcz'
import Bmyjldcz from '@/pages/xtgl/Bmyjldcz/Bmyjldcz'
import Jldcz from '@/pages/xtgl/Jldcz/Jldcz'
import Gjlxcz from '@/pages/xtgl/gjlxcz/gjlxcz'
import Gjpzbcz from '@/pages/xtgl/gjpzbcz/gjpzbcz'
import Cdbcz from '@/pages/xtgl/cdbcz/cdbcz'
import Jsbcz from '@/pages/xtgl/jsbcz/jsbcz'
import Yhbcz from '@/pages/xtgl/yhbcz/yhbcz'
import Jsycdcz from '@/pages/xtgl/jsycdcz/jsycdcz'
import Yhxxcz from '@/pages/xtgl/yhxxcz/yhxxcz'
import Yhyjscz from '@/pages/xtgl/yhyjscz/yhyjscz' */
Vue.use(Router)

function findNav_(navArr,nav){
  for(let i=0;i<navArr.length;i++){
    if(navArr[i].children.length != 0){//存在子菜單
      if(navArr[i].url != "一級菜單"){
        nav.push({
          path:navArr[i].path,
          name:navArr[i].name,
          component:resolve=>require(["@/pages/"+navArr[i].url],resolve),
          children:[]
        })
      }
      findNav_(navArr[i].children,nav);
    }else{//不存在子菜單
      nav.push({
        path:navArr[i].path,
        name:navArr[i].name,
        component:resolve=>require(["@/pages/"+navArr[i].url],resolve),
      });
    }
  }
}

export default new Router({
/* routes: [
    {path: '/',name: 'Login',component: Login},
    {path: '/Main',name: 'Main',component: Main},
    {path: '/Cbgn',name: 'Cbgn',component: Cbgn},
    {path: '/Dagl',name: 'Dagl',component: Dagl},
    {path: '/Ftgl',name: 'Ftgl',component: Ftgl},
    {path: '/Pdxtjc',name: 'Pdxtjc',component: Pdxtjc},
    {path: '/Nhtjfx',name: 'Nhtjfx',component: Nhtjfx},
    {path: '/Nhdb',name: 'Nhdb',component: Nhdb},
    {path: '/Cbhz',name: 'Cbhz',component: Cbhz},
    {path: '/Dqyxfx',name: 'Dqyxfx',component: Dqyxfx},
    {path: '/Gsbcz',name: 'Gsbcz',component: Gsbcz},
    {path: '/Byqcz',name: 'Byqcz',component: Byqcz},
    {path: '/Bmcz',name: 'Bmcz',component: Bmcz},
    {path: '/Bmyjldcz',name: 'Bmyjldcz',component: Bmyjldcz},
    {path: '/Jldcz',name: 'Jldcz',component: Jldcz},
    {path: '/Gjlxcz',name: 'Gjlxcz',component: Gjlxcz},
    {path: '/Gjpzbcz',name: 'Gjpzbcz',component: Gjpzbcz},
    {path: '/Cdbcz',name: 'Cdbcz',component: Cdbcz},
    {path: '/Jsbcz',name: 'Jsbcz',component: Jsbcz},
    {path: '/Yhbcz',name: 'Yhbcz',component: Yhbcz},
    {path: '/Jsycdcz',name: 'Jsycdcz',component: Jsycdcz},
    {path: '/Yhxxcz',name: 'Yhxxcz',component: Yhxxcz},
    {path: '/Yhyjscz',name: 'Yhyjscz',component: Yhyjscz},
  ] */
 routes: (()=>{
    let navArr=[{
        "path": "/Main",
        "url":"main/main",
        "title": "首頁",
        "name":"Main",
        "children":[]
      },{
          "path": "/Dqyxfx",
          "url":"一級菜單",
          "name":"Dqyxfx",
          "title": "電氣運行分析",
          "children":[{
              "path":"/Dqyxfx",
              "url":"yxfx/dqyxfx/dqyxfx",
              "name":"Dqyxfx",
              "title": "電氣運行分析",
              "children":[]
          }]
      },{
          "path": "/Cbgl",
          "url":"一級菜單",
          "name":"Cbgl",
          "title": "抄表管理",
          "children": [{
              "path": "/Cbgn",
              "url":"chaobiao/cbgn/cbgn",
              "name":"Cbgn",
              "title": "抄表管理",
              "children":[]
          },{
            "path": "/Ftgl",
            "url":"chaobiao/ftgl/ftgl",
            "name":"Ftgl",
            "title": "分攤管理",
            "children":[]
        }]
      },{
          "path": "/Nhtj",
          "url":"一級菜單",
          "name":"Nhtj",
          "title": "能耗統計",
          "children": [{
              "path": "/Nhtjfx",
              "name":"Nhtjfx",
              "url":"nhtj/nhtjfx/nhtjfx",
              "title": "能耗統計分析",
              "children":[]
          }]
      },{
          "path": "/Xtgl",
          "title": "系統管理",
          "url":"一級菜單",
          "name":"Xtgl",
          "children": [{
              "path": "/Yhbcz",
              "url":"xtgl/yhbcz/yhbcz",
              "title": "用戶管理",
              "name":"Yhbcz",
              "children":[]
          },{
            "path": "/Gsbcz",
            "url":"xtgl/gsbcz/gsbcz",
            "title": "單位管理",
            "name":"Gsbcz",
            "children":[]
          },{
            "path": "/Jsbcz",
            "url":"xtgl/jsbcz/jsbcz",
            "title": "角色管理",
            "name":"Jsbcz",
            "children":[]
          },{
            "path": "/Cdbcz",
            "url":"xtgl/cdbcz/cdbcz",
            "title": "菜單管理",
            "name":"Cdbcz",
            "children":[]
          },{
            "path": "/Yhxxcz",
            "url":"xtgl/yhxxcz/yhxxcz",
            "title": "用戶與單位配置",
            "name":"Yhxxcz",
            "children":[]
          },{
            "path": "/Yhyjscz",
            "url":"xtgl/yhyjscz/yhyjscz",
            "title": "用戶與角色配置",
            "name":"Yhyjscz",
            "children":[]
          },{
            "path": "/Jsycdcz",
            "url":"xtgl/jsycdcz/jsycdcz",
            "title": "角色與菜單配置",
            "name":"Jsycdcz",
            "children":[]
          },{
            "path": "/Bmcz",
            "url":"xtgl/bmcz/bmcz",
            "title": "部門管理",
            "name":"Bmcz",
            "children":[]
          },{
            "path": "/Byqcz",
            "url":"xtgl/byqcz/byqcz",
            "title": "變壓器管理",
            "name":"Byqcz",
            "children":[]
          },{
            "path": "/Jldcz",
            "url":"xtgl/Jldcz/Jldcz",
            "title": "計量點管理",
            "name":"Jldcz",
            "children":[]
          },{
            "path": "/Bmyjldcz",
            "url":"xtgl/Bmyjldcz/Bmyjldcz",
            "title": "部門與計量點配置",
            "name":"Bmyjldcz",
            "children":[]
          },{
            "path": "/Gjlxcz",
            "url":"xtgl/gjlxcz/gjlxcz",
            "title": "告警類型管理",
            "name":"Gjlxcz",
            "children":[]
          },{
            "path": "/Gjpzbcz",
            "url":"xtgl/gjpzbcz/gjpzbcz",
            "title": "告警配置管理",
            "name":"Gjpzbcz",
            "children":[]
          }]
      },{
        "path": "/",
        "url":"login/login",
        "title": "登錄",
        "name":"Login",
        "children":[]
      }]
    let nav = [];
    findNav_(navArr,nav);
    return nav
  })()
})


原理:安裝router後,全局就會有一個vueRouter的構造函數,通過實例化這個傳進去一些路由規則

路由規則必須要有path(與url有關)、component(與url匹配,顯示的組件)

二、axios

axios.get("/url",{params:{id:1}}).then(res->{})
axios({
    method:"get",
    url:"/url",
    params:{id:1}
})

併發請求

併發請求:同時進行多個請求,並且同時處理返回值

需要同時處理多個請求的返回值時用到

axios.all([
    axios.get("/url"),
    axios.get("/url2"),
]).then(axios.spread((res1,res2)=>{
    console.log(res1,res2)
}))

axios創建實例

var instance = axios.cread({
    baseURL:"http://....",
    timeout:2000,
    header:{
        token:"......"
    },
    params:{}, //參數放在url上
    data:{},//參數放在請求體
    
})
使用:instance.get("/url").then()

-----------------------------
全局配置:
axios.default.timeout = 2000
實例配置:
instance.default.timeout = 2000
axios請求配置:
axios.get("/url",{timeout = 2000})

攔截器

攔截器:在請求之前或響應之後要做的一些操作
請求攔截器:可以設置請求頭帶token或顯示遮罩層
var instance = axios.create()

instance.interceptors.request.use(
    config = >{
        config.headers.Authorization = token; //請求頭帶上token
        $("#loading").show() //顯示遮罩層
        return config  //一點要返回
    },
    error => Promise.reject(error)) //請求失敗會調這裏,返回promise對象
)
// 響應攔截器
instance.interceptors.response.use(
    res=>{
        $("#loading").hide() //關閉遮罩層
        return res  //就是給回到then中的res
    },
    error=>{

    }
)

三、vuex

定義:專門用於vue框架的全局狀態管理器
State:數據倉庫,變量
Getter:獲取數據,相當於computer可以計算state的變量,派生出新的變量
Action:提交給mutation //dispath改數據時用到,異步
Mutation:修改數據,commit改數據時用到,同步
getter{
    newdata(state){
        if(state.data==1){
            return "對的"
        }
    }
}

當state中的數據變化時,都會改變newdata
使用:this.$store.getter.newdara

使用vuex的變量方法二:解構

1、import {mapState} from 'vuex'
2、compute:{
        ...mapstate(["test","test2"])
    }
使用:this.test
需要將數據提交給後臺,後臺返回狀態時用到異步

actions:{
    getVip({commit,state}){
        retrun new Promise((resolve,reject)=>{
            //發送給後臺
            commit("text",res) //修改state的狀態
        })
    }
}

this.$store.dispath("getVip").then(()=>{

})

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章