【Vue】vue,vue-router,vuex,axios整合

*vue官網(wǎng):https://cn.vuejs.org/
vue-router官網(wǎng):https://router.vuejs.org/zh-cn/
vuex官網(wǎng):https://vuex.vuejs.org/zh-cn/
axios中文說明:https://www.kancloud.cn/yunye/axios/234845

vue-cli建立項(xiàng)目

npm install -g vue-cli 全局安裝vue腳手架
vue init webpack-simple project-name 使用webpack-simple模板建立項(xiàng)目
npm run install 安裝依賴庫(kù)
npm run dev 啟動(dòng)開發(fā)服務(wù)器

配置各種loader

#在webpack.config.js文件中添加
module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: {
                    loaders: {}
                    // other vue-loader options go here
                }
            },
            {
                test: /\.css$/,
                loader: 'style-loader!css-loader',
            },
            {
                test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,
                loader: 'file-loader'
            },
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /node_modules/
            },
            {
                test: /\.(png|jpg|gif|svg)$/,
                loader: 'file-loader',
                options: {
                    name: '[name].[ext]?[hash]'
                }
            }
        ]
    },

集成vue-router

#在src下新建router.config.js文件业踏,用于存儲(chǔ)路由配置信息
const updateUser = r => require.ensure([], () => r(require('./components/user/updateUser.vue')), 'updateUser')
export default [
    {
        path: '/updateUser',
        component: updateUser
    }
];

*在main.js中引入vue-router
import VueRouter from 'vue-router'
import routes from './router.config' 
Vue.use(VueRouter)
const router = new VueRouter({
    routes,
    mode: 'history',
    scrollBehavior (to, from, savedPosition) {
        if (savedPosition) {
            return savedPosition
        } else {
            if (from.meta.keepAlive) {
                from.meta.savedPosition = document.body.scrollTop;
            }
            return {x: 0, y: to.meta.savedPosition || 0}
        }
    }
})
new Vue({
    el: '#app',
    router,
    render: h => h(App)
})

集成vuex

  • src下新建store文件夾


  ----------------------------------------------------------------------------------------------
index.js
import Vue from 'vue'
import Vuex from 'vuex'
import mutations from './mutations'
import actions from './action'
import getters from './getter'
Vue.use(Vuex)
#index.js中主要配置state-->就是我們所需要的數(shù)據(jù)
const state = {
    mytest: 'NB',
}
#導(dǎo)出vuex對(duì)象樹
export default new Vuex.Store({
    state,
    getters,
    actions,
    mutations,
})
  ----------------------------------------------------------------------------------------------
mutation-types.js
#主要用來配置事件(動(dòng)作)類型
export const MY_TEST = 'MY_TEST'
  ----------------------------------------------------------------------------------------------
mutations.js
#事件具體實(shí)現(xiàn)蔬芥,必須是同步操作
import {
    MY_TEST,
} from './mutation-types.js'
export default {
    [MY_TEST](state){
        state.mytest = "SB"
    }
}
  ----------------------------------------------------------------------------------------------
action.js
#提供事件的異步調(diào)用(如異步發(fā)送郵件)
  ----------------------------------------------------------------------------------------------
getter.js
#提供state的計(jì)算調(diào)用
有時(shí)候我們需要從store中的state中派生出一些狀態(tài)瓤逼,例如對(duì)列表進(jìn)行過濾并計(jì)數(shù)
  ----------------------------------------------------------------------------------------------
  • 在main.js中引入vuex
import store from './store/'
new Vue({
    el: '#app',
    router,
    store,
    render: h => h(App)
})

集成axios

#在src目錄下新建http.js文件,導(dǎo)出axios對(duì)象蘑斧,該文件主要提供axios配置,如請(qǐng)求攔截器等等
import axios from 'axios'
// axios 配置
axios.defaults.timeout = 5000;
// http request 攔截器
// axios.interceptors.request.use(
//     config => {
//         if (store.state.token) {
//             config.headers.Authorization = `token ${store.state.token}`;
//         }
//         return config;
//     },
//     err => {
//         return Promise.reject(err);
//     });
// http response 攔截器
// axios.interceptors.response.use(
//     response => {
//         return response;
//     },
//     error => {
//         if (error.response) {
//             switch (error.response.status) {
//                 case 401:
//                     // 401 清除token信息并跳轉(zhuǎn)到登錄頁面
//                     store.commit(types.LOGOUT);
//                     router.replace({
//                         path: 'login',
//                         query: {redirect: router.currentRoute.fullPath}
//                     })
//             }
//         }
//         // console.log(JSON.stringify(error));//console : Error: Request failed with status code 402
//         return Promise.reject(error.response.data)
//     });
export default axios;

項(xiàng)目整體目錄結(jié)構(gòu)

dist --> 項(xiàng)目編譯后的目錄,也是我們最后要部署到服務(wù)器上的文件
node_modules --> node.js庫(kù)
src/API --> 封裝獲取API數(shù)據(jù)的方法
src/assets --> 資源文件蒲列,如js忽媒,css争拐,圖片等
src/compents --> .vue文件,即組件
src/store --> vuex單例數(shù)據(jù)樹配置文件夾
src/utils --> 封裝常用的工具類
APP.vue --> 主頁面組件
http.js --> 封裝axios
main.js --> 工程入口文件晦雨,可在其中配置導(dǎo)入全局要是用的組件及庫(kù)
router.config.js --> 封裝路由信息配置
index.html --> 訪問主頁架曹,需要部署到服務(wù)器上
package.json --> 依賴庫(kù)配置
webpack.config.js --> webpack工程配置,主要配置loder,用于解析各類文件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末还栓,一起剝皮案震驚了整個(gè)濱河市般甲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绳慎,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漠烧,死亡現(xiàn)場(chǎng)離奇詭異杏愤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)已脓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門珊楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人度液,你說我怎么就攤上這事厕宗』啵” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵已慢,是天一觀的道長(zhǎng)曲聂。 經(jīng)常有香客問我,道長(zhǎng)佑惠,這世上最難降的妖魔是什么朋腋? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮膜楷,結(jié)果婚禮上旭咽,老公的妹妹穿的比我還像新娘。我一直安慰自己赌厅,他們只是感情好穷绵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著特愿,像睡著了一般请垛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洽议,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天宗收,我揣著相機(jī)與錄音,去河邊找鬼亚兄。 笑死混稽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的审胚。 我是一名探鬼主播匈勋,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼膳叨!你這毒婦竟也來了洽洁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤菲嘴,失蹤者是張志新(化名)和其女友劉穎饿自,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體龄坪,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昭雌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了健田。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烛卧。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妓局,靈堂內(nèi)的尸體忽然破棺而出总放,到底是詐尸還是另有隱情呈宇,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布局雄,位于F島的核電站甥啄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哎榴。R本人自食惡果不足惜型豁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一僵蛛、第九天 我趴在偏房一處隱蔽的房頂上張望尚蝌。 院中可真熱鬧,春花似錦充尉、人聲如沸飘言。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姿鸿。三九已至,卻和暖如春倒源,著一層夾襖步出監(jiān)牢的瞬間苛预,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工笋熬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留热某,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓胳螟,卻偏偏與公主長(zhǎng)得像昔馋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糖耸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容