Vue基本用法
1、Vue结构
<template>
</template>
<script>
import component from '@/xxx'
import method from './yyy'
export default {
name: 'xxx',
components: { component },
mixins: [method()],
props: {
prop1: { type: String, required: true },
prop2: { type: Number, default: 123 }
},
data() {
return {
attr1: null,
attr2: null,
rules: {
attr1: [
{ required: true, message: 'xxx', trigger: 'blur' }
],
attr3: [
{ required: true, message: 'xxx', trigger: 'change' }
]
}
}
},
methods: {
method1() {
},
method2() {
}
},
beforeCreate() {
},
created() {
},
beforeMount() {
},
mounted() {
},
beforeUpdate() {
},
updated() {
},
computed: {
attr1: {
get() {
return this.attr1
},
set(val) {
this.attr1 = val
}
},
attr3() {
return 'xxx'
}
},
watch: {
attr1(value) {
},
'attr2': function(val, oldVal) {
}
},
beforeDestroy() {
},
destroyed() {
}
}
</script>
<style scoped>
</style>
2、标签属性
<template>
<el-input value="123"/> <!-- 原生属性 -->
<el-input>{{ attr }}</el-input> <!-- 字符串模板 -->
<el-input v-model="attr"/> <!-- 绑定变量 -->
<el-input :value="method()"/> <!-- @是v-bind的缩写,表示数据绑定,支持单值、多值、样式等 -->
<el-button @click="onclick"/> <!-- @是v-on的缩写,表示事件回调或方法调用 -->
</template>
<script>
export default {
data() {
return {
attr: 456
}
},
methods: {
method() {
return 789
},
onclick() {
}
}
}
</script>
<style scoped>
</style>
3、组件保活
<template>
<keep-alive>
<el-input v-model="value"/> <!-- 必须用keep-alive包裹 -->
</keep-alive>
</template>
<script>
export default {
data() {
return {
value: null
}
},
activated() {
this.value = 123
}
}
</script>
<style scoped>
</style>
4、导入导出
export function method1() {}
export function method2() {}
export default { method1, method2 }
<template>
<Component />
</template>
<script>
import Component from '@/xxx'
import yyyMethods from './yyy'
import { method1, method2 } from '@/zzz'
export default {
components: { Component },
methods: {
method() {
yyyMethods.method1()
method2()
}
}
}
</script>
<style scoped>
</style>
5、表单校验
<template>
<el-form ref="form" :rules="rules"> <!-- 表单名和规则名随意 -->
<el-row>
<el-col>
<el-form-item label="变量1" prop="prop1"> <!-- 表单属性名随意 -->
<el-input v-model="attr1"/> <!-- 这是组件变量,与表单中声明的属性没有直接关系,可以同名也可以不同名 -->
</el-form-item>
<el-form-item label="变量2" prop="prop2">
<el-input v-model="attr2"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-button @click="onclick">点我</el-button>
</el-col>
</el-row>
</el-form>
</template>
<script>
export default {
data() {
return {
attr1: null,
attr2: null,
rules: {
prop1: [
{ required: true, message: '必填提示', trigger: 'blur' },
{ max: 90, message: '长度不能超过90', trigger: 'change' }
],
prop2: [
{
required: true,
validator: (rule, value, callback) => {
if (!value) {
callback(new Error('必填提示'))
}
callback()
}
}
]
}
}
},
methods: {
onclick() {
this.$refs['form'].validate((valid) => {
if (valid) {
}
})
}
}
}
</script>
<style scoped>
</style>
6、接口方法
import axios from 'axios'
import { Notification } from 'element-ui'
import qs from 'qs'
const service = axios.create({ baseURL: 'http://192.168.1.1:8080', timeout: 30 * 1000 })
function request(config) {
if (config.method === 'get' && config.data) {
config.url = config.url + '?' + qs.stringify(config.data, { indices: false })
}
return service(config)
}
service.interceptors.request.use(
config => {
config.headers['Authorization'] = 'Bearer xxx'
config.headers['Content-Type'] = 'application/json'
return config
},
error => {
Promise.reject(error)
}
)
service.interceptors.response.use(
response => {
if (200 !== response['code']) {
Notification.error({ title: response.message })
return Promise.reject(response.message)
}
},
error => {
Notification.error({ title: '接口请求失败', duration: 5000 })
return Promise.reject(error)
}
)
export default request
import request from '@/request'
export function method1(data) {
return request({
url: 'system/method1',
method: 'get',
data
})
}
export function method2(params) {
return request({
url: 'system/method2',
method: 'post',
params
})
}
export function method3() {
return request({
url: 'system/method3',
method: 'update'
}).then(res => {
}).catch(err => {
})
}
export default { method1, method2, method3 }
<template>
<div @click="onclick"/>
</template>
<script>
import { method1, method2 } from './xxx'
export default {
mixins: [method1(), method2()],
data() {
return {}
},
methods: {
onclick() {
method2().then((res) => {
})
}
}
}
</script>
<style scoped>
</style>
7、钩子函数
<template>
<p ref="useDom">段落内容</p> <!-- 钩子关键词ref或hook,名称随意,一般以useXxx命名,同钩子获取原生DOM -->
<el-button @click="getDom"/>
<el-button @click="setDom"/>
</template>
<script>
export default {
methods: {
getDom() {
console.log(this.$refs.useDom)
},
setDom() {
this.$refs.useDom.innerText = '新的段落内容'
}
}
}
</script>
<style scoped>
</style>
8、CRUD