angular 指令请求数据是不好的做法吗

Is it bad practice for an angular directive to request data

例如考虑一个 currentUser 指令。

我可以让控制器使用服务来获取有关当前用户的数据,将其提供给指令并让指令呈现一些 "hello {user.name}" 模板。

或者我可以让指令依赖于某些 currentUserService 并在指令的控制器中请求 currentUserService.getCurrentUser.

是否出于任何原因两者之一明显优于另一个? 我倾向于使用第一个选项,但不确定使用第二个选项是否不会有利于减少所有当前用户逻辑的传播...

谢谢

只要您从服务请求数据,我相信在指令中对其具有依赖性就可以了。
控制器的主要方面是可以访问 $scope,仅此而已。

有两种情况,这实际上取决于您的指令的目的:

  1. 该指令仅用于显示用户数据(以复杂的方式)
  2. 该指令显示数据并对其进行操作(根据用户输入)

场景 1

由于指令的唯一目的是以某种方式呈现数据,因此指令不应负责检索数据。

所以你解耦了如何访问数据和如何显示数据的逻辑。这样您也可以为当前登录用户以外的用户使用该指令。

如果应该有一些特殊的东西可见,如果用户已登录,指令应该使用 ng-ifng-show(可能还有一个参数来禁用该视图部分) .

情景 2

在这种情况下,指令的目的是为某些业务逻辑(服务功能)提供图形用户界面。因此服务应该被注入到指令中。


备注:

表现

如果您通过方法调用从您的服务中获取数据,那么如果您加载数据并将其注入指令控制器,则此方法在每个摘要周期中只会被调用一次。否则它可能会在指令的每次出现时被调用一次。

完整性

请记住,如果您的服务方法通过 http 请求数据并且您在一个视图中使用该指令例如 3 次并且该指令调用服务方法本身,这将导致 3 个相同的请求可能具有不相同的结果(即其他人在处理请求时更改了数据)。

使用服务驻留业务总是更好 logic.You 应该使用服务来获取数据并将该服务注入 directive.Do 不要使用控制器之间进行通信 directive.Service 是为了那个目的,发起一次。