三十九、Vue项目上手 | 用户管理系统 实现添加用户(中篇)
@Author:Runsen
@Date:2020/7/7
人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难,奋勇前行,不忘初心,砥砺前行,人生定会有所收获,不留遗憾 (作者:Runsen )
作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件。导致翘课严重,专业排名中下。.在大学60%的时间,都在CSDN。决定今天比昨天要更加努力。我的征途是星辰大海!
今天是高考第二天,当年我就是一个辣鸡,现在还是一个辣鸡,祝高考的个个清华北大。
我看了下高考的导数最后一题,挺简单的。
(1)第一问比较简单,求个导数就行
(2)首先变量分离
下面直接考虑x>0的情况。
标准答案
废话不多说,继续学前端。
连接接口
上次完成到这里,搭建了模板
在之前,利用json-server,搭建了3000端口的API,这里需要同时的运行起来。
可以访问http://localhost:3000/users,具体结果如下所示。
现在的目标很简单了,就是通过Customers.vue中的customers一个空列表变成接口里面的东西。
我们可以在组件中定义一个方法来连接数据,这里需要涉及vue-resource插件
vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。
C:\Users\YIUYE\Desktop\project\customers>npm install vue-resource --save
安装成功后,在main.js导入
import VueResource from 'vue-resource'
Vue.use(VueResource)
导入完成后,那么this.$http.get
就可以用了。现在直接打印http://localhost:3000/users
的response,然后定义一个created执行函数。
下图就是效果,这样就可以看见http://localhost:3000/users
的接口数据。
拿到数据渲染
下面就是 拿到数据渲染,使用v-for
遍历,this.customers = response.body
,这样customers 就有值了。
<template>
<div class="customers container">
<h1 class="page-header">用户管理系统</h1>
<table class="table table-striped">
<thead>
<tr>
<th>姓名</th>
<th>电话</th>
<th>邮箱</th>
<th></th>
</tr>
</thead>
<tbody v-for="customer in customers">
<tr>
<td>{{customer.name}}</td>
<td>{{customer.phone}}</td>
<td>{{customer.email}}</td>
<td></td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
name: 'customers',
data() {
return {
customers :[],
}
},
methods: {
// 连接数据
fetchCustomers(){
this.$http.get("http://localhost:3000/users").then(function(response){
console.log(response)
this.customers = response.body
})
}
},
created() {
this.fetchCustomers();
},
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
具体效果如下所示。
添加用户
下面实现一个添加用户的功能,其实一个功能就是一个组件,这是我发现的。于是就写一个Add.vue的组件。
<template>
<div class="add container">
添加用户
</div>
</template>
<script>
export default {
name: 'add',
data() {
return {}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
下面就是在main.js设置添加的路由。
下面是main.js全部代码
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import VueRouter from 'vue-router'
import VueResource from 'vue-resource'
import App from './App'
import Customers from './components/Customers.vue'
import About from './components/About.vue'
import Add from './components/Add.vue'
Vue.config.productionTip = false
Vue.use(VueRouter)
Vue.use(VueResource)
// 设置路由
const router = new VueRouter({
mode:"history",
base: __dirname,
routes:[
{path:'/',component:Customers},
{path:'/about',component:About},
{path:'/add',component:Add}
]
})
/* eslint-disable no-new */
new Vue({
router,
template: `
<div id="app">
<nav class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">用户管理系统</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><router-link to="/">主页</router-link></li>
<li><router-link to="/about">关于我们</router-link></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><router-link to="/add">添加用户</router-link></li>
</ul>
</div>
</div>
</nav>
<router-view></router-view>
</div>
`
}).$mount("#app")
下图就是添加用户的页面。
下面就是实现添加用户的组件,具体代码如下。这里就是添加一个用户传3000接口。
<template>
<div class="add container">
<h1 class="pag-header">添加用户</h1>
<form v-on:submit="addCustomer">
<div class="well">
<h4>用户信息</h4>
<div class="form-group">
<label>姓名</label>
<input type="text"
class="form-control"
placeholder="name"
v-model="customer.name">
</div>
<div class="form-group">
<label>电话</label>
<input type="text"
class="form-control"
placeholder="phone"
v-model="customer.phone">
</div>
<div class="form-group">
<label>邮箱</label>
<input type="text"
class="form-control"
placeholder="email"
v-model="customer.email">
</div>
<div class="form-group">
<label>学历</label>
<input type="text"
class="form-control"
placeholder="education"
v-model="customer.education">
</div>
<div class="form-group">
<label>毕业学校</label>
<input type="text"
class="form-control"
placeholder="graduationschool"
v-model="customer.graduationschool">
</div>
<div class="form-group">
<label>职业</label>
<input type="text"
class="form-control"
placeholder="profession"
v-model="customer.profession">
</div>
<div class="form-group">
<label>个人简介</label>
<!-- <input type="text" class="form-control" placeholder="profile" v-model="customer.profile"> -->
<textarea class="form-control"
rows="10"
v-model="customer.profile"></textarea>
</div>
<button type="submit"
class="btn btn-primary">添加</button>
</div>
</form>
</div>
</template>
<script>
export default {
name: 'add',
data() {
return {
customer:{}
}
},
methods:{
addCustomer(e){
// console.log(123);
if (!this.customer.name || !this.customer.phone || !this.customer.email) {
// console.log("请添加对应的信息!");
this.alert = "请添加对应的信息!";
}else{
let newCustomer = {
name:this.customer.name,
phone:this.customer.phone,
email:this.customer.email,
education:this.customer.education,
graduationschool:this.customer.graduationschool,
profession:this.customer.profession,
profile:this.customer.profile
}
this.$http.post("http://localhost:3000/users",newCustomer)
.then(function(response){
// console.log(response);
this.$router.push({path:"/",query:{alert:"用户信息添加成功!"}});
})
e.preventDefault();
}
e.preventDefault();
}
},
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
下面是测试结果