Vue-Element(一)項目的創(chuàng)建

說明

自用
資料: vue實現(xiàn)動態(tài)注冊并渲染組件

版本

vue: 2.9.6
webpack: 3.12.0

一锈候、安裝 webpack

全局安裝

npm install webpack -g

查看安裝

webpack -v

二讼积、安裝vue-cli

npm install vue-cli -g

三往毡、創(chuàng)建項目

vue init webpack projectname(項目的名稱)

四赌渣、安裝依賴

進入項目文件夾后執(zhí)行npm install

cd workbench
npm install

五晓淀、安裝和設(shè)置element-ui

官網(wǎng):https://element.eleme.cn

安裝
npm i element-ui -S
完整引入

在 main.js 中寫入以下內(nèi)容:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

六怜瞒、安裝http庫和配置http請求設(shè)置

安裝axios
npm install axios
配置request請求

src下新建utils/request.jsrequest.js內(nèi)容如下:

import axios from 'axios'
import qs from 'qs'
import {Message} from 'element-ui'

// create an axios instance
const service = axios.create({
  baseURL: 'http://10.10.20.35:8000/api', // url = base url + request url
  withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000, // request timeout
  showLoading: true,
})

// request interceptor
service.interceptors.request.use(
  config => {
    // do something before request is sent
    console.log('request=>', config)
    if (config.headers['Content-Type'] === 'application/x-www-form-urlencoded') {
      config.data = qs.stringify(config.data)
    }
    return config
  },
  error => {
    // do something with request error
    console.log('request.error=>', error) // for debug
    return Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  response => {
    console.log('response=>', response)

    const res = response.data

    if (res.code < 0) {

      Message({
        message: res.msg || 'Error',
        type: 'error',
        duration: 2 * 1000
      })

      return Promise.reject(res.msg || 'Error')
    } else {
      return res
    }
  },
  error => {
    console.log('response.error=>', error) // for debug
    Message({
      message: error.message || 'Error',
      type: 'error',
      duration: 2 * 1000
    })
    return Promise.reject(error)
  }
)

export default service

新建 api 和 views
測試接口訪問正常

user.js中新增登錄接口

import request from '@/utils/request.js'

export const login = (data) => {
  return request({
    url: 'user/login',
    method: 'post',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    data
  })
}

新增登錄視圖login.vue

<template>
  <el-form :model="userForm" label-width="80px" class="user-login">
    <el-form-item label="用戶名">
      <el-input v-model="userForm.user"></el-input>
    </el-form-item>
    <el-form-item label="密碼">
      <el-input v-model="userForm.password" type="password"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">登陸</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
import {login} from '@/api/user'
import {Message} from 'element-ui'

export default {
  name: 'login',
  data () {
    return {
      userForm: {
        user: '',
        password: ''
      }
    }
  },
  methods: {
    submitForm () {
      login(this.userForm).then(result => {
        Message(result.msg)
      })
    }
  }
}
</script>

<style scoped>
  .user-login {
    width: 500px;
  }
</style>

src 下的 app.vue修改為

<template>
  <router-view/>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
</style>

src/router/index.js修改為

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/views/user/login'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Login',
      component: Login
    }
  ]
})

執(zhí)行命令

npm run dev

成功后訪問http://localhost:8080

初次訪問

輸入登錄信息止潮,點擊登錄后報錯:
Access to XMLHttpRequest at 'http://10.10.20.35:8000/api/user/login' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
出現(xiàn)跨域問題窃判。

登錄報錯

七、解決跨域問題

在項目目錄下config/index.js中新增如下配置:

module.exports = {
  dev: {

    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      "/api": {
        target: 'http://10.10.20.35:8000/api',
        pathRewrite:{
          '^/api':''
        }
      }
    },
    ..... 此處省略原有配置
}

config/dev.env.js中新增:

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  baseUrl: '"/api"'
})

config/prod.env.js中新增

'use strict'
module.exports = {
  NODE_ENV: '"production"',
  baseUrl: '"http://10.10.20.35:8000/api/"' //此次填寫生產(chǎn)環(huán)境域名
}

src/utils/request.jsbaseURL修改如下

// create an axios instance
const service = axios.create({
  baseURL: process.env.baseUrl, // url = base url + request url
  withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000, // request timeout
  showLoading: true
})

再次運行后喇闸,嘗試登錄:


登錄成功

八袄琳、vue 多環(huán)境配置

參考如下:

https://www.cnblogs.com/itmrzhang/p/11008280.html

九询件、將index.html轉(zhuǎn)移到src

index.html位置

原位置

index.html轉(zhuǎn)移到src
轉(zhuǎn)移后

轉(zhuǎn)移后需要修改build/webpack.dev.conf.js

    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: './src/index.html',
      inject: true
    }),

轉(zhuǎn)移后還需要修改build/webpack.prod.conf.js

    new HtmlWebpackPlugin({
      filename: config.build.index,
      template: './src/index.html',
      inject: true,
      minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeAttributeQuotes: true
        // more options:
        // https://github.com/kangax/html-minifier#options-quick-reference
      },
      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
      chunksSortMode: 'dependency'
    }),
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市唆樊,隨后出現(xiàn)的幾起案子宛琅,更是在濱河造成了極大的恐慌,老刑警劉巖逗旁,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘿辟,死亡現(xiàn)場離奇詭異,居然都是意外死亡片效,警方通過查閱死者的電腦和手機红伦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淀衣,“玉大人昙读,你說我怎么就攤上這事∨蚯牛” “怎么了蛮浑?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長只嚣。 經(jīng)常有香客問我沮稚,道長,這世上最難降的妖魔是什么介牙? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任壮虫,我火速辦了婚禮澳厢,結(jié)果婚禮上环础,老公的妹妹穿的比我還像新娘。我一直安慰自己剩拢,他們只是感情好线得,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徐伐,像睡著了一般贯钩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上办素,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天角雷,我揣著相機與錄音,去河邊找鬼性穿。 笑死勺三,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的需曾。 我是一名探鬼主播吗坚,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼祈远,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了商源?” 一聲冷哼從身側(cè)響起车份,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牡彻,沒想到半個月后扫沼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡庄吼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年充甚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霸褒。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡伴找,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出废菱,到底是詐尸還是另有隱情技矮,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布殊轴,位于F島的核電站衰倦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏旁理。R本人自食惡果不足惜樊零,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望孽文。 院中可真熱鬧驻襟,春花似錦、人聲如沸芋哭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽减牺。三九已至豌习,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拔疚,已是汗流浹背肥隆。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留稚失,地道東北人栋艳。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像墩虹,于是被迫代替她去往敵國和親嘱巾。 傳聞我的和親對象是個殘疾皇子憨琳,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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

  • jHipster - 微服務(wù)搭建 CC_簡書[http://www.reibang.com/u/be0d56c4...
    quanjj閱讀 795評論 0 2
  • 開發(fā)一個項目,采用什么語言都可以旬昭,主要能熟練高效的開發(fā)都是合理的篙螟,這次我們采用vue來開發(fā)一個團隊項目。在開...
    MsgSS閱讀 2,913評論 3 9
  • 33问拘、JS中的本地存儲 把一些信息存儲在當前瀏覽器指定域下的某一個地方(存儲到物理硬盤中)1遍略、不能跨瀏覽器傳輸:在...
    萌妹撒閱讀 2,071評論 0 2
  • ## 框架和庫的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計架構(gòu)和**解決方案**。> > 庫(lib...
    Rui_bdad閱讀 2,890評論 1 4
  • 本文基于工作項目開發(fā)骤坐,做的整理筆記因工作需要绪杏,項目框架由最初的Java/jsp模式,逐漸轉(zhuǎn)移成node/expre...
    SeasonDe閱讀 7,440評論 3 35