项目代码规范化
eslint设置
要创建一个基础的crud界面,首先要创建对应的路由
以src/router/modules/table.js下,complexTable为例
{
path: 'complex-table',
component: () => import('@/views/table/complexTable'),
name: 'ComplexTable',
meta: { title: 'complexTable' }
}
component: () => import('@/views/table/complexTable'), 表示这个路由对应的vue界面的位置
一个路由一般对应一个vue界面,注意这个子路由是在table的children的数组下的一个对象,在路由加载时就会加载成table下的子菜单
以 src/views/table/complexTable.vue为例
由于这里不支持双色,建议复制到vscode或者别的编译器中查看,我写的都是带了注释的应该为绿色
{{ $t('table.search') }}
{{ $t('table.add') }}
{{ $t('table.export') }}
{{ $t('table.reviewer') }}
****
{{ scope.row.id }}
{{ scope.row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}
{{ scope.row.title }}
{{ scope.row.type | typeFilter }}
{{ scope.row.author }}
{{ scope.row.reviewer }}
{{ scope.row.pageviews }}
0
{{ scope.row.status }}
{{ $t('table.edit') }}
{{ $t('table.publish') }}
{{ $t('table.draft') }}
{{ $t('table.delete') }}
代码位置 src/api
建议一个view对应一个api下的js,将一个页面中基础的crud等与后端访问的请求写到一起,方便管理
这里使用了/utils/request.js,封装了一下axios请求,分别展示了一个get和post的使用方法
import request from '@/utils/request'
export function fetchList(query) {
return request({
url: '/ArticleApi/list',
method: 'get',
params: query
})
}
export function createArticle(data) {
return request({
url: '/ArticleApi/create',
method: 'post',
data
})
}
src/utils/request.js
这里的baseURL就是访问后端的基础路径,使用的是process.env.BASE_API ,在config/dev.env.js配置文件中配置BASE_API
例如 dev 环境中使用 fetchList 访问后台的路径就是 http://localhost:8080/ArticleApi/list
config/dev.env.js中的BASE_API是 http://localhost:8080
api 中的 url 是 /ArticleApi/list
当使用打包命令 npm run build 时,访问的就是 config/prod.env.js 文件中的 BASE_API
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
// create an axios instance
const service = axios.create({
baseURL: process.env.BASE_API // api 的 base_url
timeout: 5000 // 请求过期时间
})
// request interceptor
service.interceptors.request.use(
config => {
// Do something before request is sent
if (store.getters.token) {
// 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
config.headers['Authorization'] = getToken()
}
return config
},
error => {
// Do something with request error
console.log(error) // for debug
Promise.reject(error)
}
)
前端分页组件
前端请求将 page(页码) limit(每页条数)发给后台,后台筛选数据后,返回一个数组给前端
this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delArticle(tempData).then(() => {
....
})
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
})
})
概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示;
{{ scope.row.status }}
filters: {
statusFilter(status) {
const statusMap = {
published: 'success',
draft: 'info',
deleted: 'danger'
}
return statusMap[status]
},
typeFilter(type) {
return calendarTypeKeyValue[type]
}
},
document.querySelector(".input1")
获取这个dom节点,然后在获取input1的值。但是用ref绑定之后,我们就不需要在获取dom节点了,直接在上面的input上绑定input1,然后$refs里面调用就行。
{{message}}
var vm = new Vue({
el: '#example',
data: {
message: '123'
}
})
vm.message = 'new message' // 更改数据
vm.$el.textContent === 'new message' // false
Vue.nextTick(function () {
vm.$el.textContent === 'new message' // true
})
框架登陆原理简单分析
饿了么UI文档
项目使用文档