例如考虑一个currentUser指令。
我可以让控制器使用服务来获取有关当前用户的数据,将其提供给指令并让指令呈现一些" hello {user.name}"模板。
或者我可以让指令依赖某些currentUserService,并在指令的控制器中请求currentUserService.getCurrentUser。
两个中的一个明显优于另一个吗? 我倾向于使用第一个选项,但不确定使用第二个选项是否会使所有当前用户逻辑的传播更少...
由于
答案 0 :(得分:2)
只要您从服务中请求数据,我相信在指令中依赖它就可以了。
控制器的主要方面是可以访问$ scope,而不是更多。
答案 1 :(得分:1)
有两种情况,它实际上取决于您的指令的目的:
情景1
由于指令的唯一目的是以某种方式呈现数据,因此该指令不应负责检索数据。
因此,您可以解析逻辑如何访问数据以及如何显示数据。这样,您也可以将该指令用于当前登录用户以外的用户。
如果某些特殊内容可见,如果用户已登录,则该指令应使用ng-if
或ng-show
(并且可能是禁用该视图部分的参数)。< / p>
情景2
在这种情况下,该指令的目的是为某些业务逻辑提供gui (服务功能)。因此,服务应该注入指令。
<强>注:强>
服务表现
如果通过来自服务的方法调用获取数据,则只有在加载数据并将其注入指令控制器时,才会在每个摘要周期中调用此方法一次。否则,每次出现指令都可以调用一次。
INTEGRITY
请记住,如果您的服务方法通过http请求数据,并且您在视图中使用该指令3次并且该指令调用服务方法本身,则这将导致3个相同的请求,这些请求可能具有非相同的结果(即其他人在处理请求时更改数据)。
答案 2 :(得分:0)
使用服务来驻留业务逻辑总是更好。您应该使用服务来获取数据并将该服务注入指令。不要使用控制器在指令之间进行通信。服务就是为此目的,启动一次。