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