Vue2
.Vue模板结构
import * as echarts from 'echarts'
import { getListlddm, getListRoadRange } from '@/api/util'
import { getCameraGunDatas } from '@/api/surplus'
export default {
name: 'EventDetectionRatio',
data() {
return {
tableKey: 1,
query: {
startTime: null
}
}
},
mounted() {
// 模板组件中只有mounted和data是方法其他全部是属性
},
watch: {
},
methods: {
reset() {
es6 中 :function 可以直接忽略
}
},
filters: {
// 过滤器 必须有一个参数 有 管道传递
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
}
data数据定义
data中的数据属性不要定义为null vue模板会无法加载 如果是空定义对应的类型 {} [] ,''
注册全局组件
import Vue from 'vue'
import RuleTable from './RuleTable'
Vue.component(`${RuleTable.name}`, RuleTable)
Vue.component(组件的名字,组件模板)
在进行模块导入的时候如果是给定的文件夹则默认导入文件夹下index.js的文件
Props
组件间的通信(父---->子)
props: {
title: { type: String, default: '弹出框' },
visible: { type: Boolean, required: true },
height: { type: String, default: '60%' },
detail: { type: Object, default: () => { return {} } }
}
// type
验证的type 类型可以是:
• String
• Number
• Boolean
• Object
• Array
• Function
type 也可以是一个自定义构造器,使用instanceof 检测。
当prop 验证失败时,在开发版本下会在控制台抛出一条警告。
// default 默认值
// required 是否必须传递
父组件传递的时候带上v-bind : 代表是表达式 不然只能接收到str
props 中声明的数据与组件data 函数return 的数据主要区别就是props 的来自父级,而data 中的是组件自己的数据,作用域是组件本身,这两种数据都可以在模板template 及计算属性computed和方法methods 中使用。
props中的属性是只读的要把数据转存到data中信息读写操作
自定义事件
组件间的通信(子---->父)
sendMsg(){
//func: 是父组件指定的传数据绑定的函数,this.msg:子组件给父组件传递的数据
this.$emit('func',this.msg)
}
注意:这里的func是父组件中绑定的函数名
父组件中在子组件的标签上添加自定义事件并添加回调函数
<child @func="getMsgFormSon"></child>
getMsgFormSon(data){
this.msgFormSon = data
console.log(this.msgFormSon)
}
自定义标签
components
当vue中引用组件时 要在components中声明自定义标签 才可以在当前vue组件
dom
如果要操作dom元素在标签添加ref属性
等待页面重新渲染后再执行此方法

this.$nextTick(()=>{})
自定义组件的插槽

在子组件中用
子组件定义后 在 父组件中可以进行添加内容 并且自定替换的插槽 v-slot: 简写 #
侦听器
watch属性
computed 和 watch 作用一样 执行时机比watch早一些
监听单个属性
firstName(val) {
this.fullName = val + ' ' + this.lastName
}
单个对象
info:{
handler(newval){
log(newval)
}
// 深度监听 默认false
deep:true
// 加载页面就监听
imediate:true
}
对象中的单个属性
'info.username'(newval){
log(newval)
}
表单验证
from 表单添加属性
:rules="rules" ref="ruleForm" :model="ruleForm"
prop代表要校验的对象的属性
<el-form-item label="活动名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
rules对象放在data数据中对象属性就是prop规则名
该属性是一个列表 列表中存放多个校验对象
字段说明
type 示type要使用的验证器。 默认string
string:类型必须为string。type 默认是 string
boolean:
integer:
number:类型必须为number
float:
array:
enum:
// 校验
enum: [
{type: 'enum', enum: ['aaa', 'bbb'], message: `不存在enum中`, trigger: 'change'}
]
url:
email:类型必须为 email
method:类型必须为 function
regexp:必须是 RegExp 创建新时不会产生异常的的实例或字符串 RegExp。
object:类型必须为 object
date:类型必须为 date
hex:类型必须为 hex
any:任何类型
required 是否必须bollean
message 提示消息str
min: 最小长度int
max: 最大长度int
len: 自定确切长度(如果该len属性与min和max范围属性结合使用,len则优先。)int
trigger 触发器 str
trigger类型为blur的功能是文本框失去焦点才会触发
trigger类型为change的功能是文本框在输入内容时触发
trigger类型也可以同时使用blur和change,功能结合上面两个的功能
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
],
region: [
{ required: true, message: '请选择活动区域', trigger: 'change' }
],
date1: [
{ type: 'date', required: true, message: '请选择日期', trigger: 'change' }
]
}
触发校验
只有valid为true的使用才成功
add() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.addupAroundPlace(this.form)
this.dealDialog = false
} else {
console.log('error submit!!')
}
})
},
axios封装
一

挂载到每个vue实例中就可以直接使用
this.http.xxx
缺点:不利于api的复用没使用一个相同的接口 都要写一坨一样的数据处理方法
二
封装request.js模块

import axios from 'axios'
const request1 = axios.create((
∥指定请求的报路径
baseURL:'https://www.escook.cn'
})
const request2 = axios.create((
∥指定请求的报路径
baseURL:'https://www.escook.cn'
})
export default request1
export default request2
实际例子
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
// Axios 中文说明
// https://www.kancloud.cn/yunye/axios/234845
const Authorization = process.env.VUE_APP_AUTH_TOKEN_KEY
const apiUrl = process.env.VUE_APP_BASE_API
// create an axios instance
const service = axios.create({
// `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
// 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
// baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
// baseURL: '/api_wangq/eventCheckServer', // url = base url + request url
baseURL: apiUrl, // url = base url + request url
// baseURL: 'http://10.44.111.223:8081/eventCheckServer', // url = base url + request url
// `transformRequest` 允许在向服务器发送前,修改请求数据
// 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
// 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
// transformRequest: [function(data) {
// // 对 data 进行任意转换处理
// return data
// }],
// `transformResponse` 在传递给 then/catch 前,允许修改响应数据
// transformResponse: [function(data) {
// // 对 data 进行任意转换处理
// return data
// }],
// withCredentials: true, // send cookies when cross-domain requests
timeout: 60000 // request timeout
})
// request interceptor
service.interceptors.request.use(
config => {
// do something before request is sent
if (store.getters.token) {
// let each request carry token
// ['X-Token'] is a custom headers key
// please modify it according to the actual situation
// [{"key":"Authorization","value":"bearer 97b3dfec-4b39-4584-be37-f7d0b5e6fbd3","description":""}]
config.headers[Authorization] = `bearer ${store.getters.token}`
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/
/**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
response => {
const { data } = response
// 以下为新定义data格式
if (data.hasOwnProperty('status')) {
if (data.status !== 'OK' && data.status !== true) {
// 错误处理: data.code
const message = data.message || 'Unknown Error'
Message({ message: message, type: 'warning' })
return Promise.reject(new Error(message))
}
}
return data
},
error => {
if (error.response) {
const { status, data } = error.response
// to re-login 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; 401: Permission denied
if (status === 401) {
// You have been logged out, you can cancel to stay on this page, or log in again
MessageBox.confirm(`${data.resp_msg}`, 'Confirm logout', { confirmButtonText: 'Re-Login', cancelButtonText: 'Cancel', type: 'warning' }).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
} else if (status === 5000) {
//
} else {
Message({ message: data.resp_msg || data.message || 'Network Error', type: 'error' })
}
} else {
// console.log(error) // for debug
Message({ message: error.message || 'Network Error', type: 'error', duration: 5 * 1000 })
}
return Promise.reject(error)
}
)
export default service
api.js
import request from '@/utils/request'
export function getConstructionDetails(data) {
return request({
url: '/reportForms/surplusStatistics/getConstructionDetails',
method: 'post',
data: data
})
}
export function getConstructionCard(params) {
return request({
url: '/reportForms/surplusStatistics/getConstructionCard',
method: 'get',
params
})
}
路由

挂载路由到vue


路由重定向 redirect

子路由 在 路由页面中还有路由


浙公网安备 33010602011771号