让我们通过另一个案例来进一步展示 Vue.js 的能力:创建一个简单的用户管理应用。这个应用将允许用户查看用户列表、添加新用户、编辑现有用户信息以及删除用户。
项目结构
user-management-app/
|-- public/
| |-- index.html
|-- src/
| |-- components/
| | |-- UserForm.vue
| | |-- UserList.vue
| |-- services/
| | |-- userService.js
| |-- App.vue
| |-- main.js
|-- package.json
1. index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User Management App</title>
</head>
<body>
<div id="app"></div>
<script src="/src/main.js"></script>
</body>
</html>
2. main.js
import Vue from 'vue';
import App from './App.vue';
import userService from './services/userService';
Vue.config.productionTip = false;
new Vue({
el: '#app',
render: h => h(App),
data: {
users: [],
currentUser: null
},
created() {
this.loadUsers();
},
methods: {
loadUsers() {
userService.getAll().then(users => {
this.users = users;
});
},
addOrUpdateUser(user) {
this.currentUser = user;
},
saveUser() {
userService.save(this.currentUser).then(() => {
this.loadUsers();
this.currentUser = null;
});
},
removeUser(id) {
userService.remove(id).then(() => {
this.loadUsers();
});
}
}
});
3. App.vue
<template>
<div>
<h1>User Management</h1>
<UserList :users="users" @remove="removeUser" />
<UserForm :user="currentUser" @save="saveUser" />
</div>
</template>
<script>
import UserList from './components/UserList.vue';
import UserForm from './components/UserForm.vue';
export default {
components: {
UserList,
UserForm
},
data() {
return {
users: [],
currentUser: null
};
},
methods: {
loadUsers() {
// Load users from service
},
addOrUpdateUser(user) {
// Open form with user data
},
saveUser() {
// Save user data
},
removeUser(id) {
// Remove user
}
}
};
</script>
4. UserList.vue
<template>
<ul>
<li v-for="user in users" :key="user.id">
{{ user.name }} - {{ user.email }}
<button @click="$emit('remove', user.id)">Delete</button>
<button @click="$emit('edit', user)">Edit</button>
</li>
</ul>
</template>
<script>
export default {
props: ['users'],
methods: {
// Methods can be added here if needed
}
};
</script>
5. UserForm.vue
<template>
<form @submit.prevent="saveUser">
<input type="text" v-model="user.name" placeholder="Name" required>
<input type="email" v-model="user.email" placeholder="Email" required>
<button type="submit">Save</button>
</form>
</template>
<script>
export default {
props: ['user'],
methods: {
saveUser() {
this.$emit('save', this.user);
}
}
};
</script>
6. userService.js
// A mock service for user management
export default {
getAll() {
return Promise.resolve([
{ id: 1, name: 'John Doe', email: 'john@example.com' },
// ... other users
]);
},
save(user) {
// Logic to save user
return Promise.resolve();
},
remove(id) {
// Logic to remove user
return Promise.resolve();
}
};
这个用户管理应用的案例展示了以下 Vue.js 的核心概念和高级特性:
- 组件通信:父子组件之间通过
props
和事件 ($emit
) 进行通信。 - 表单处理:使用
v-model
进行双向数据绑定,处理表单输入。 - 条件和列表渲染:使用
v-for
渲染用户列表,使用v-if
根据条件渲染元素。 - 数据流管理:通过 Vue 实例的
data
和方法管理应用状态。 - 服务抽象:使用服务 (
userService.js
) 抽象 API 调用,模拟异步数据操作。 - 生命周期钩子:使用
created
钩子在实例创建后立即加载用户列表。
这个案例是一个更完整的应用示例,它涵盖了用户界面和数据管理的更多方面,展示了如何使用 Vue.js 构建具有数据持久化和表单交互的应用程序。