Logo
Section 1 / 5

控制器简介

了解 Ember 中控制器的概览及其与路由的关系。

导入

控制器简介

了解 Ember 中控制器的概览及其与路由的关系。

简介

控制器(controller) 负责处理模板和组件的事件。我们可以在控制器中定义动作(actions)、属性以及 URL 查询参数。控制器与路由使用相同的名称进行配对。路由会向控制器传递一个名为 model 的单一属性,该属性返回路由中 model() 方法的返回值。这个 model 属性通过 setupController() 函数传递给控制器。只有在需要处理某些事件或自定义某些属性时,才需要手动创建控制器。如果未为某个路由创建控制器,Ember 会在运行时自动为其生成一个控制器实例。

...
MVC 设计模式

生成控制器

有两种方式创建控制器:可以手动在 app/controllers 目录下创建一个与路由同名的文件,也可以使用 Ember CLI 命令来生成。执行以下命令:

1ember g controller <name>

控制器名称应与路由名称一致。该命令会在 app/controllers 中生成一个控制器文件,并在 tests/unit/controllers 中生成一个单元测试文件。

路由与控制器的关系

路由和控制器对应同一个 URL,名称相同,但位于不同的目录中。路由只能将模型数据传递给模板,而控制器则可用于定义属性和动作。Ember 动作 是可在 Ember 模板中使用的简单函数,且定义在控制器中。如果将动作、变量或属性定义在 router.js 文件中,它们无法被子组件访问。若尝试从 router.js 文件中访问 model() 钩子的结果,只会得到该函数本身;但可以在控制器中访问 model() 钩子的返回结果——即实际的数据。

何时使用控制器

我们使用控制器的情况包括:

  • 将动作和变量传递给路由的子组件;
  • 基于 model() 钩子返回结果创建计算属性;
  • 使用查询参数;
  • 使用追踪属性(tracked properties)。

Ember 中的组件

使用控制器处理操作