2015-10-19 54 views
3

例如考慮currentUser指令。角度指令請求數據是不好的做法

我可以讓控制器使用服務來獲取有關當前用戶的數據,將它提供給指令並讓指令呈現一些「hello {user.name}」模板。

或者我可以讓指令對一些currentUserService有依賴關係,並且在指令的控制器中請求currentUserService.getCurrentUser。

由於任何原因,其中一個明顯比另一個好嗎? 我傾向於只要去的第一選擇,但如果使用第二個將不具有呈現當前所有的用戶邏輯較少四周擴散的好處不知道......

感謝

回答

2

你正在從一個服務請求數據,我相信在一個指令中對它有一個依賴是沒有問題的。
該控制器的主要方面是有權訪問$範圍,而不是更多。

1

有兩種情況,它真的取決於你的指令的目的:

  1. 指令僅用於顯示用戶的數據(以複雜的方式)
  2. 指令顯示數據和操縱它(根據用戶輸入)

方案1

由於僅purpo它的指令它以以某種方式呈現數據,指令不應該負責檢索數據。

因此,您可以分離邏輯如何訪問數據以及如何顯示數據。通過這種方式,您還可以爲當前登錄用戶以外的用戶使用該指令。

如果應該有一些特殊的東西可見,如果用戶登錄,該指令應該使用ng-ifng-show(可能是一個參數來禁用該視圖部分)。

方案2

在這種情況下,指令的目的是提供對於某些業務邏輯(服務功能)的GUI。因此該服務應該被注入該指令。


備註:

服務表現

如果您從您的服務中獲得通過方法調用的數據,這種方法只會一次在每個消化週期,如果你載入名爲數據並將其注入指令控制器。否則,每次發生該指令時可能會調用一次。

INTEGRITY

記住,如果你正在使用的指令,例如3倍的視圖和指令調用服務的方法本身,這將導致你的服務的方法請求通過HTTP數據3個相同的請求可能具有不同的結果(即,其他人在處理請求時更改數據)。

0

使用服務來駐留業務邏輯總是比較好的。您應該使用服務來獲取數據並將該服務注入指令。不要使用控制器在指令之間進行通信。服務就是爲了這個目的而啓動一次。