1.vue項(xiàng)目-base

vue項(xiàng)目全了解

1.創(chuàng)建vue項(xiàng)目

1.全局安裝vue-cli

     npm install --global vue-cli  (或cnpm install --global vue-cli)
     注意:cnpm需先安裝淘寶鏡像 npm install -g cnpm --registry=https://registry.npm.taobao.org.

2.安裝初始項(xiàng)目vue init webpack + 項(xiàng)目名稱

     vue init webpack vue-base-demo

3.成功之后护侮,安裝項(xiàng)目依賴:

 cnpm install

2.安裝項(xiàng)目常用插件

  • axios
    為什么要用axios?
    axios 是一個(gè)基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端溢吻,它本身具有以下特征:
    從瀏覽器中創(chuàng)建 XMLHttpRequest,    從 node.js 發(fā)出 http 請求囱皿,支持 Promise API,攔截請求和響應(yīng)响谓,轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù)债查,取消請求,自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)卵蛉,客戶端支持防止CSRF/XSRF颁股。
    
//安裝
npm install axios --save

//在main.js中引入
import axios from 'axios'

//再main.js獲取axios對象
Vue.prototype.axios = axios

//在main.js添加可以全局設(shè)置,之后就可以不用填域名頭和請求頭
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// 在main.js添加可以全局?jǐn)r截器
// 添加請求攔截器
axios.interceptors.request.use(function (config) {
    // 在發(fā)送請求之前做些什么
    return config;
  }, function (error) {
    // 對請求錯(cuò)誤做些什么
    return Promise.reject(error);
  });

// 添加響應(yīng)攔截器
axios.interceptors.response.use(function (response) {
    // 對響應(yīng)數(shù)據(jù)做點(diǎn)什么
    return response;
  }, function (error) {
    // 對響應(yīng)錯(cuò)誤做點(diǎn)什么
    return Promise.reject(error);
  });

注意:
axios的post請求只接收form-data格式:
  1.form-data格式:
    就是http請求中的multipart/form-data,它會(huì)將表單的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開.既可以 上傳鍵值對,也可以上傳文件.當(dāng)上傳的字段是文件時(shí)會(huì)有Content-Type來表名文件類型;content-disposition用 來說明字段的一些信息;
    由于有boundary隔離,所以multipart/form-data既可以上傳文件也可以上傳鍵值對,它采用了鍵值對的方式,所以可以上傳多個(gè)文件.如:?name=iwen&age=20
  2.x-www-form-urlencoded格式:
    就是application/x-www-from-urlencoded,會(huì)將表單內(nèi)的數(shù)據(jù)轉(zhuǎn)換為鍵值對,比如 : name=Java&age = 23
如:{name:“iwen”,age:20}

  • qs
qs是vue項(xiàng)目自帶傻丝,無需安裝甘有,但要引入

//可以在main.js內(nèi)全局引入和獲取對象
import qs from 'qs'

Vue.prototype.qs = qs
qs是用來做序列化的,JSON.stringify也是做序列化處理的葡缰,但你要知道他們序列化的結(jié)果是不一樣的梧疲。

var a = {b:1,c:2}
qs-->"b=1&c=2"(這個(gè)叫query字符串嗎)
JSON.stringify: {"b":1,"c":2}(json字符串)

  • element
//下載
npm i element-ui -S
------------------------------------------------------------------------------------------------------------------------------------------
//按需引用需要使用到的組件
npm install babel-plugin-component -D

//然后,修改.babelrc 运准,將下面加入到plugins對象的最后一個(gè)參數(shù)中:(根據(jù)element文檔來幌氮,可能有更新)
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
------------------------------------------------------------------------------------------------------------------------------------------
//按需引入要用的模塊,可直接放在main.js胁澳,模塊名參考element文檔
import { Button, Select } from 'element-ui';

//使用该互,可直接放在main.js
Vue.use(Button)
------------------------------------------------------------------------------------------------------------------------------------------
//路徑2:全局引入
import ElementUI from 'element-ui'  //手動(dòng)變紅
import '../node_modules/element-ui/lib/theme-chalk/index.css'   //手動(dòng)變紅

Vue.use(ElementUI)

  • vuex
    vuex相當(dāng)于設(shè)置全局變量,而且也是可以實(shí)時(shí)多個(gè)頁面數(shù)據(jù)共享


如果只傳一個(gè)值韭畸,完全可以不用vuex(太浪費(fèi))宇智,可這樣

//main.js中注冊Vue時(shí)添加變量
new Vue({
      el: '#app', router, store,
      template: '<App/>',
      components: {
            App
      },
        data () {
            return {
              modoleType: modoleType    //初始化modoleType
            }
    }
//其它頁面這樣調(diào)用
console.log(this.$root.$data.modoleType);
Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式
這個(gè)狀態(tài)自管理應(yīng)用包含以下3個(gè)部分:
state蔓搞,驅(qū)動(dòng)應(yīng)用的數(shù)據(jù)源;
view随橘,以聲明方式將 state 映射到視圖喂分;
actions,響應(yīng)在 view 上的用戶輸入導(dǎo)致的狀態(tài)變化机蔗。
//安裝
npm install vuex --save
//引入
import Vuex from 'vuex'
//使用
Vue.use(Vuex)
//main.js創(chuàng)建一個(gè)store倉庫
const store = new Vuex.Store({
    state:{ //每一個(gè) Vuex 應(yīng)用的核心就是 store(倉庫)蒲祈。“store”基本上就是一個(gè)容器萝嘁,它包含著你的應(yīng)用中大部分的狀態(tài) (state)梆掸。
        count:10
    },
    mutations:{ //更改 Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation
        increment(state){
            state.count++;
        }
    }
});
//記得創(chuàng)建Vue實(shí)例時(shí)引入store
new Vue({
  el: '#app',
  router,
  store,  //必須放進(jìn)實(shí)例中
  components: { App },
  template: '<App/>'
})
//其它頁面就可以調(diào)用了
this.$store.commit('increment')  //其它頁面調(diào)用store的mutation內(nèi)方法,必須用.commit();
return this.$store.state.count; //其它頁面調(diào)用store的state屬性

main.js創(chuàng)建一個(gè)同級(jí)目錄store/index.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

//創(chuàng)建一個(gè)store倉庫
export default new Vuex.Store({
    state:{ //每一個(gè) Vuex 應(yīng)用的核心就是 store(倉庫)牙言∷崆眨“store”基本上就是一個(gè)容器,它包含著你的應(yīng)用中大部分的狀態(tài) (state)咱枉。
        count:10
    },
    mutations:{ //更改 Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation,必須是同步操作卑硫,//沒有網(wǎng)絡(luò)請求和其它異步操作可以直接用mutations
        increment(state){
            state.count++;
        },
        decrease(state){
            state.count--;
        }
    },
    //Action 類似于 mutation,不同在于:
    //1 Action 提交的是 mutation蚕断,而不是直接變更狀態(tài)欢伏。
    //2 Action 可以包含任意異步操作。
    actions:{  //有網(wǎng)絡(luò)請求必須用actions基括,要異步嘛
        increment(context){ //可以設(shè)置名稱和mutations對應(yīng)的方法相同的名稱
            context.commit("increment");
        },
        decrease(context){  //可以包含任意異步操作颜懊。
            setTimeout(()=>{
                context.commit('decrease');
            },1000);
//context.commit('decrease');
        }
    },
    getters:{ //對state數(shù)據(jù)進(jìn)行計(jì)算,Vuex 允許我們在 store 中定義“getter”(可以認(rèn)為是 store 的計(jì)算屬性)风皿。就像計(jì)算屬性一樣河爹,getter 的返回值會(huì)根據(jù)它的依賴被緩存起來,且只有當(dāng)它的依賴值發(fā)生了改變才會(huì)被重新計(jì)算桐款。
        getState(state){
            return state.count>0?state.count:0;
        }
    }
});

然后在main.js引用和在實(shí)例引用

import store from './store'

new Vue({
  el: '#app',
  router,
  store,  //必須放進(jìn)實(shí)例中
  components: { App },
  template: '<App/>'
})

其它頁面調(diào)用數(shù)據(jù)demo

<template>
  <div class="hello">
    <button @click="geta">+</button>
    {{getc}}
    <button @click="getb">-</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  },
  methods:{
    geta(){
        console.log(111);
        this.$store.dispatch('increment');
    },
    getb(){
        console.log(222);
        this.$store.dispatch('decrease');
        
    }
  },
  computed:{
    getc(){
        
        
        this.$store.commit('decrease');
        this.$store.commit('increment')  //其它頁面調(diào)用store的mutation內(nèi)方法咸这,必須用.commit();
        
        //return this.$store.state.count; //其它頁面調(diào)用store的state屬性
        return this.$store.getters.getState; //
    }
  }
}
</script>

  • vux
    vux需要注意點(diǎn)擊按鈕的觸發(fā)要用@click.native,只用@click觸發(fā)不了

<x-button class="xbuttonView1" @click.native="greet()">下一步</x-button>

//用v-for="(item, key) in timeValue"循環(huán),用:id="key" :value="item"綁定index和值魔眨,:key="item.index"綁定key
<checker class="checkerView" v-model="value7" default-item-class="demo2-item" v-for="(item, key) in timeValue" :key="item.index">
        <checker-item :id="key" :value="item" @click.native="changeTime">{{item}}</checker-item>
</checker>

  • uuid
    生產(chǎn)隨機(jī)碼
//安裝
npm install uuid --save
//main.js引入
import uuid from 'uuid/v1'
//向Vue對象添加uuid的屬性和方法
Vue.prototype.uuid = uuid
//其它頁面使用方法
this.uuid()

  • vee-validate
    表單驗(yàn)證
//安裝
npmpm installnst  vee-validate --save
//main.js引入
import VeeValidate from 'vee-validate';
//使用
Vue.use(VeeValidate);
//demo媳维,其它頁面直接使用,v-validate指定遏暴,必須有name做綁定
<input v-validate="'required|email'" name="email" type="text">
<span>{{ errors.first('email') }}</span>

  • md5加密
npm install js-md5
在需要加密的地方引入使用
import md5 from ‘js-md5’

md5(idcard+‘kaxinhehuoren’+phone+‘kaxinhehuoren’+name+‘kaxinhehuoren’)

12store保存本地
cnpm install store
在需要用到的地方引入
import store from ‘store’
設(shè)置
store.set(‘userInfo’, res.data.outData);
提取
store.get(‘user’)

3 注意點(diǎn)

  • vue過濾器
    Vue.js 允許你自定義過濾器侄刽,可被用于一些常見的文本格式化。過濾器可以用在兩個(gè)地方:雙花括號(hào)插值和 v-bind 表達(dá)式 (后者從 2.1.0+ 開始支持)朋凉。過濾器應(yīng)該被添加在 JavaScript 表達(dá)式的尾部州丹,由“管道”符號(hào)指示:
//在雙花括號(hào)中
{{ message | capitalize }}

//與data同級(jí)
filters: {
  capitalize: function (value) {
    if (!value) return ''
    value = value.toString()
    return value.charAt(0).toUpperCase() + value.slice(1)
  }
}

//也可以在main.js里全局配置過濾器
Vue.filter('capitalize', function (value) {
  if (!value) return ''
  value = value.toString()
  return value.charAt(0).toUpperCase() + value.slice(1)
})

  • router配置
//主要在src\router\index.js中配置路由,先引入地址
import IntegralManagement from '@/components/IntegralManagement/IntegralManagement'

//再在router里面配置信息
    routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },{
      path: '/IntegralManagement',
      name: 'IntegralManagement',
      component: IntegralManagement
    }
  ]

//配置完后可調(diào)用下語句直接跳轉(zhuǎn)頁面
this.$router.push('/IntegralManagement')

//也可使用 <router-link> 映射路由
<router-link to="/IntegralManagement">IntegralManagement</router-link>

  • Vue打包上線部署
在打包前還要在config文件夾中的index.js中設(shè)置一個(gè)路徑問題,不然會(huì)報(bào)錯(cuò)墓毒,
在js中找到build:{assetsPublicPath:’/’}吓揪,默認(rèn)路徑是‘/’,需要加上’.’,寫成所计、’./’(一般正常編輯代碼是只進(jìn)行本步修改即可)柠辞。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市主胧,隨后出現(xiàn)的幾起案子叭首,更是在濱河造成了極大的恐慌,老刑警劉巖讥裤,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件放棒,死亡現(xiàn)場離奇詭異姻报,居然都是意外死亡己英,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門吴旋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來损肛,“玉大人,你說我怎么就攤上這事荣瑟≈文茫” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵笆焰,是天一觀的道長劫谅。 經(jīng)常有香客問我,道長嚷掠,這世上最難降的妖魔是什么捏检? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮不皆,結(jié)果婚禮上贯城,老公的妹妹穿的比我還像新娘。我一直安慰自己霹娄,他們只是感情好能犯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犬耻,像睡著了一般踩晶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枕磁,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天渡蜻,我揣著相機(jī)與錄音,去河邊找鬼透典。 笑死晴楔,一個(gè)胖子當(dāng)著我的面吹牛顿苇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播税弃,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼纪岁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了则果?” 一聲冷哼從身側(cè)響起幔翰,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎西壮,沒想到半個(gè)月后遗增,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡款青,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年做修,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抡草。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饰及,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出康震,到底是詐尸還是另有隱情燎含,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布腿短,位于F島的核電站屏箍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏橘忱。R本人自食惡果不足惜赴魁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹦付。 院中可真熱鬧尚粘,春花似錦、人聲如沸敲长。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祈噪。三九已至泽铛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辑鲤,已是汗流浹背盔腔。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弛随。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓瓢喉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舀透。 傳聞我的和親對象是個(gè)殘疾皇子栓票,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 33、JS中的本地存儲(chǔ) 把一些信息存儲(chǔ)在當(dāng)前瀏覽器指定域下的某一個(gè)地方(存儲(chǔ)到物理硬盤中)1愕够、不能跨瀏覽器傳輸:在...
    萌妹撒閱讀 2,080評(píng)論 0 2
  • ## 框架和庫的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計(jì)架構(gòu)和**解決方案**走贪。> > 庫(lib...
    Rui_bdad閱讀 2,906評(píng)論 1 4
  • vue是什么? vue是構(gòu)建數(shù)據(jù)驅(qū)動(dòng)的web界面的漸進(jìn)式框架惑芭。Vue.js 的目標(biāo)是通過盡可能簡單的 API 實(shí)現(xiàn)...
    九四年的風(fēng)閱讀 8,703評(píng)論 2 131
  • vue-cli搭建項(xiàng)目 確保安裝了node與npm 再目標(biāo)文件夾下打開終端 執(zhí)行cnpm i vue-cli -g...
    Akiko_秋子閱讀 3,227評(píng)論 1 22
  • 現(xiàn)在沒用過vue框架遂跟,都不好意思說自己是干前端呢逃沿,當(dāng)然這句話并不是說干前端非得會(huì)vue,只是想說明他的火爆程度,現(xiàn)...
    候鳥與暖風(fēng)閱讀 3,893評(píng)論 1 103