角度指令请求数据是不好的做法

时间:2015-10-19 08:55:25

标签: angularjs angularjs-directive separation-of-concerns

例如考虑一个currentUser指令。

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

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

两个中的一个明显优于另一个吗? 我倾向于使用第一个选项,但不确定使用第二个选项是否会使所有当前用户逻辑的传播更少...

由于

3 个答案:

答案 0 :(得分:2)

只要您从服务中请求数据,我相信在指令中依赖它就可以了。
控制器的主要方面是可以访问$ scope,而不是更多。

答案 1 :(得分:1)

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

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

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

    因此,您可以解析逻辑如何访问数据以及如何显示数据。这样,您也可以将该指令用于当前登录用户以外的用户。

    如果某些特殊内容可见,如果用户已登录,则该指令应使用ng-ifng-show(并且可能是禁用该视图部分的参数)。< / p>

    情景2

    在这种情况下,该指令的目的是为某些业务逻辑提供gui (服务功能)。因此,服务应该注入指令。

    <强>注:

    服务表现

    如果通过来自服务的方法调用获取数据,则只有在加载数据并将其注入指令控制器时,才会在每个摘要周期中调用此方法一次。否则,每次出现指令都可以调用一次。

    INTEGRITY

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

答案 2 :(得分:0)

使用服务来驻留业务逻辑总是更好。您应该使用服务来获取数据并将该服务注入指令。不要使用控制器在指令之间进行通信。服务就是为此目的,启动一次。