Ember用户管理CRUD #
一、项目概述 #
1.1 功能需求 #
- 用户列表
- 用户创建
- 用户编辑
- 用户删除
- 用户搜索
二、数据模型 #
2.1 User模型 #
javascript
// app/models/user.js
import Model, { attr } from '@ember-data/model';
export default class UserModel extends Model {
@attr('string') name;
@attr('string') email;
@attr('string') phone;
@attr('string') role;
@attr('boolean') isActive;
@attr('date') createdAt;
get statusText() {
return this.isActive ? '活跃' : '禁用';
}
}
三、路由实现 #
3.1 用户列表 #
javascript
// app/routes/users.js
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
export default class UsersRoute extends Route {
@service store;
model() {
return this.store.findAll('user');
}
}
3.2 用户创建 #
javascript
// app/routes/users/new.js
import Route from '@ember/routing/route';
export default class UsersNewRoute extends Route {
model() {
return this.store.createRecord('user', {
isActive: true,
role: 'user',
});
}
}
3.3 用户编辑 #
javascript
// app/routes/users/edit.js
import Route from '@ember/routing/route';
export default class UsersEditRoute extends Route {
model(params) {
return this.store.findRecord('user', params.user_id);
}
}
四、控制器实现 #
4.1 用户列表控制器 #
javascript
// app/controllers/users.js
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
export default class UsersController extends Controller {
@tracked searchTerm = '';
@tracked filterRole = 'all';
get filteredUsers() {
let users = this.model;
if (this.searchTerm) {
const term = this.searchTerm.toLowerCase();
users = users.filter(
(user) =>
user.name.toLowerCase().includes(term) ||
user.email.toLowerCase().includes(term)
);
}
if (this.filterRole !== 'all') {
users = users.filterBy('role', this.filterRole);
}
return users;
}
@action
updateSearch(event) {
this.searchTerm = event.target.value;
}
@action
setFilter(role) {
this.filterRole = role;
}
}
五、组件实现 #
5.1 用户表单组件 #
javascript
// app/components/user-form.js
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
export default class UserFormComponent extends Component {
roles = ['admin', 'user', 'guest'];
@action
async submit(event) {
event.preventDefault();
if (this.args.onSubmit) {
await this.args.onSubmit(this.args.user);
}
}
@action
updateField(field, event) {
this.args.user[field] = event.target.value;
}
@action
toggleActive() {
this.args.user.isActive = !this.args.user.isActive;
}
}
六、总结 #
CRUD应用要点:
| 操作 | 方法 |
|---|---|
| Create | createRecord + save |
| Read | findAll/findRecord |
| Update | 修改属性 + save |
| Delete | destroyRecord |
掌握CRUD是Web开发的基础。
最后更新:2026-03-28