步驟
- vue-cli
- npm i vue-cli -g
- 安裝 element-ui
- npm i element-ui -S
- 安裝 vuex
- npm install vuex -s
- 安裝 axios
- npm install axios
- 安裝 scss
- npm install node-sass –save-dev
- npm install sass-loader –save-dev
知識點 axios
axios({
url: 'platform-app/tenant/queryTenants',
method: 'post',
data: {
pageNum:this.pageNum,
pageSize:this.pageSize
}
}).then((res)=>{
console.log(res.data);
}).catch((err)=>{
console.log(err)
})
axios({
url:'platform-app/tenant/getTenant/'+this.tentaid,
method:'get'
}).then((res)=>{
console.log(res.data);
})
vue-cli 腳手架 中webpack配置反向代理
- config檔案夾中index.js檔案中
- 找到proxyTable:{}進行如下配置
proxyTable: {
'/platform-app': {
target: 'http://10.66.0.49:80',
changeOrigin: true,
pathRewrite: {
'^/platform-app': '/platform-app'
}
}
},
- 詳細講解:
這個參數主要是一個位址映射表,你可以通過設定将複雜的url簡化,例如我們要請求的位址是api.xxxxxxxx.com/list/1,可以按照如下設定:
proxyTable: {
'/list': {
target: 'http://api.xxxxxxxx.com',
pathRewrite: {
'^/list': '/list'
}
}
}
這樣我們在寫url的時候,隻用寫成/list/1就可以代表api.xxxxxxxx.com/list/1.
那麼又是如何解決跨域問題的呢?其實在上面的’list’的參數裡有一個changeOrigin參數,接收一個布爾值,如果設定為true,那麼本地會虛拟一個服務端接收你的請求并代你發送該請求,這樣就不會有跨域問題了,當然這隻适用于開發環境。增加的代碼如下所示:
proxyTable: {
'/list': {
target: 'http://api.xxxxxxxx.com',
changeOrigin: true,
pathRewrite: {
'^/list': '/list'
}
}
}
vue-cli的這個設定來自于其使用的插件http-proxy-middleware
vuex具體步驟
- 安裝 vuex
- npm install vuex -s
- 元件中component.vue
<template>
<div>
{{vuexTest}}
<el-button @click="changeValue">按鈕</el-button>
</div>
</template>
<script>
import {mapGetters,mapActions} from 'vuex'
computed:{
...mapGetters([//從store上綁定的getters中載入需要到此元件中
'vuexTest'//在getters.js中建立一個名為msg的方法
])
},
methods:{
...mapActions([//從store上綁定的action中載入需要的到此元件中
'changeValue',//在store檔案夾中的actions.js中建立一個名為changeValue的方法
]),
}
</script>
- 初始狀态值放在rootState.js中
const state = {
vuexTest: '', //初始值為空
}
export default state;
- actions.js
- 異步邏輯應該封裝在action 中
- 重點在于commit
import axios from 'axios';
import { addTenantForTenantId, initTenant, queryTenants } from '../api/axios-api.js'
export const changeValue = ({ commit }) => {
queryTenants({ pageNum: , pageSize: }).then(res => {
console.log(res.data);
commit({
type: 'getMsg', //vue會自動去找mutations.js中名為getMsg的方法
vuexTest: res.data, //成功後把得到的資料通過commit傳入mutations
})
}).catch((err) => {
console.log(err);
})
}
- mutations.js
- 改變store中state的狀态值
export const getMsg = (state, data) => {
state.vuexTest = data.vuexTest[].cloudType
}
- getters.js
export const vuexTest = state => state.vuexTest
element-ui 表單驗證
data(){
let phoneValidator =(rule,value,callback)=>{
if(!/^1[3|4|5|8|7][0-9]\d{8}$/.test(value)){
callback(new Error('請輸入正确的手機号'))
}else{
callback();
}
}
return{
ruleForm: {
diaPhone:'',
},
rules:{
diaPhone:[
{required:true,message:'請輸入管理者電話',trigger:'blur'},
{validator:phoneValidator,trigger:"change"}
]
},
export const changeValue = ({ commit }) => {
queryTenants({ pageNum: , pageSize: }).then(res => {
console.log(res.data);
commit({
type: 'getMsg', //vue會自動去找mutations.js中名為getMsg的方法
vuexTest: res.data, //成功後把得到的資料通過commit傳入mutations
})
}).catch((err) => {
console.log(err);
})
}
vue-router 2.0 元件之間傳參及擷取動态參數
1.标簽
<li v-for=" el in hotLins" >
<router-link :to="{path:‘details‘,query: {id:el.tog_line_id}}">
<img :src="el.image_list[0]">
<h3>{{el.tourism_name}} {{el.tog_line_id}}</h3>
<p>{{el.address}}</p>
</router-link>
</li>
2.在元件中,需要傳動态參數時,可以如上例子
3.query中的參數id就是要傳的參數,在元件中擷取的方法為:
created: function() {
var id = this.$route.query.id;
this.getData(id);
},
4.如上述,this. route.query.id就可以擷取該參數,也可以通過,this. root.id = id;傳給父元件,父元件中通過
// 根元件構造器
var vm = Vue.extend({
router: router,
data: function() {
return {
id: ‘‘ //城會玩明細id
}
}
})
5.定義data中的id,然後子元件中用props傳遞參數
props: {
id: {
type: String,
required: true
}
},
6.router-view中,傳遞該參數:
element ui的el-input如何監聽Enter鍵
- @keyup.enter.native
<el-form-item label="租戶名稱:">
<el-input v-model="Name" placeholder="請輸入名稱" @keyup.enter.native="search()"></el-input>
</el-form-item>