一 创建项目
1. 安装vue-cli
npm install -g @vue/cli
创建项目
mkdir projects && cd projects
vue ui
vue create create-vue-app-in 通过命令行创建项目
选择项目偏好,生成项目
二 设置路由(router)
import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'Hello',
component: Hello
}
]
})
三 项目重点
1. 根据API文档get方式获取数据
async getUserList() {
const { data: res } = await this.$http.get('users', { params: this.queryInfo })
if (res.meta.status === 200) {
if (res.data.users.length !== 0) {
this.userList = res.data.users
this.total = res.data.total
} else {
this.queryInfo.pagenum--
this.getUserList()
if (this.queryInfo.pagenum === 1) {
return null
}
}
} else {
this.$message.error('获取用户列表失败')
}
}
2. 根据API文档post方法传递数据
saveCategory() {
this.$refs.catRuleRef.validate(async valid => {
if (valid) {
const { data: res } = await this.$http.post('categories', this.cateRuleForm)
console.log(res)
if (res.meta.status === 201) {
this.hideDialog()
this.$emit('updateList')
}
} else {
this.$message.error('请填写好分类信息')
}
})
}
3. 根据API文档put方法获取数据
async saveRole() {
const { data: res } = await this.$http.put(`users/${this.user.id}/role`, { rid: this.selectRole })
if (res.meta.status === 200) {
console.log(res)
this.$message.success('成功修改角色')
this.selectRole = ''
this.$emit('updatelist')
this.hide()
}
}
4.根据API文档删除数据
deleteCategroy(id) {
this.$confirm('此操作将永久删除该用户, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async res => {
if (res === 'confirm') {
const { data: res } = await this.$http.delete(`categories/${id}`)
if (res.meta.status === 200) {
this.$message.success('删除成功')
this.getCategoryList()
} else {
this.$message.error(res.meta.msg)
}
}
}).catch(err => {
console.log(err)
this.$message.info('取消了该删除')
})
}
5.校验提示
addUserRules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 10, message: '请输入3-10个字符', trigger: 'blur' }
],
email: [
{ required: true, message: '请输入邮箱', trigger: 'blur' },
{ validator: checkObj.checkEmail, trigger: 'blur' }
],
mobile: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: checkObj.checkMobile, trigger: 'blur' }
]
}
6. 添加功能
addOneUser() {
this.$refs.userFormRef.validate(async valid => {
if (valid) {
const { data: res } = await this.$http.post('users', this.userForm)
console.log(res)
this.addUserdialogVisible = !this.addUserdialogVisible
this.getUserList()
} else {
this.$message.error('请检查数据')
}
})
}
7.项目中使用的组件通讯 props / $emit
父组件 A 通过 props 的方式向子组件 B 传递,B to A 通过在 B 组件中 $emit, A 组件中 v-on 的方式实现。
1.父组件向子组件传值
//App.vue父组件
<template>
<div id="app">
<users v-bind:users="users"></users>//前者自定义名称便于子组件调用,后者要传递数据名
</div>
</template>
<script>
import Users from "./components/Users"
export default {
name: 'App',
data(){
return{
users:["Henry","Bucky","Emily"]
}
},
components:{
"users":Users
}
}
//users子组件
<template>
<div class="hello">
<ul>
<li v-for="user in users">{{user}}</li>//遍历传递过来的值,然后呈现到页面
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props:{
users:{
type:Array,
required:true
}
}
}
</script>
2.组件向父组件传值(通过事件形式)
// 子组件
<template>
<header>
<h1 @click="changeTitle">{{title}}</h1>//绑定一个点击事件
</header>
</template>
<script>
export default {
name: 'app-header',
data() {
return {
title:"Vue.js Demo"
}
},
methods:{
changeTitle() {
this.$emit("titleChanged","子向父组件传值");
}
}
}
</script>
// 父组件
<template>
<div id="app">
<app-header v-on:titleChanged="updateTitle" ></app-header>//与子组件titleChanged自定义事件保持一致
// updateTitle($event)接受传递过来的文字
<h2>{{title}}</h2>
</div>
</template>
<script>
import Header from "./components/Header"
export default {
name: 'App',
data(){
return{
title:"传递的是一个值"
}
},
methods:{
updateTitle(e){
this.title = e;
}
},
components:{
"app-header":Header,
}
}
</script>
总结
项目的实现,最主要的是路由的配置,服务器和浏览器的数据传递与查看,组件间数据的传递,思维逻辑的通顺。