2014-01-21 75 views
0

我有很多$控制器scope.variables更簡單的方法將範圍變量傳遞到服務?

$scope.users = userService.getUsers(); 
$scope.selectedAvailableGroups; 
$scope.selectedAssignedGroups; 
$scope.availableGroups; 
$scope.assignedGroups; 

我有我的控制器功能,它使用一個服務,服務需要傳遞給它arguements:

$scope.removeUserFromGroup = function(){ 
    userService.removeUserFromGroup($scope.selectedUser,$scope.selectedAssignedGroups, $scope.availableGroups, $scope.assignedGroups) 
}; 

已經可以看到, removeUserFromGroup函數接受4個參數,但名稱很長,看起來效率不高。

這是真的做到這一點的最好方法還是我做錯了什麼?

我有一個名爲addUserToGroup的函數,它基本上使用了完全相同的參數,似乎是多餘的,我需要將該信息再次傳遞給服務。

回答

0

如果你關心的可讀性,你可以格式化像這樣的電話(我想讀好一點):

$scope.removeUserFromGroup = function(){ 
    userService.removeUserFromGroup(
     $scope.selectedUser, 
     $scope.selectedAssignedGroups, 
     $scope.availableGroups, 
     $scope.assignedGroups 
    ); 
}; 

如果你真的懶得有關參數的數量,他們「重可能會增加,你可以將它們作爲一個對象的屬性:

$scope.removeUserFromGroup = function(){ 
    userService.removeUserFromGroup({ 
     selectedUser: $scope.selectedUser, 
     selectedGroups: $scope.selectedAssignedGroups, 
     availableGroups: $scope.availableGroups, 
     assignedGroups: $scope.assignedGroups 
    }); 
}; 
+0

會這樣的工作:http://jsfiddle.net/85r4H/ – Batman

+0

這將 - http://jsfiddle.net/LfEtp/1/。在範圍上創建模型屬性似乎有點奇怪,因爲實質上,範圍對象是視圖模型本身。同樣在你最近的例子中,你將用戶列表傳遞給你剛剛檢索它的服務。既然服務已經有了這些信息,爲什麼將它傳遞回來呢? –

+0

考慮到你對$ scope已經是模型的評論,我可以不把$ scope本身傳遞給函數嗎? userService.removeUserFromGroup($ scope)而不必創建另一個名爲model的對象?而且是對的。我不需要用戶對象,因爲它已經在服務中,很好的通話。 – Batman

1

雖然它確實取決於應用程序,也許在你的範圍變量有更多的是與業務邏輯和應存放在服務。如果視圖需要它們,則控制器可以訪問服務器的變量並對其進行範圍調整,但不需要將它們全部發送回服務,除非它們發生更改。

+0

我從未考慮將變量放入服務中。在我看來,讓用戶數組來自用戶服務權限。我會給這個鏡頭。 – Batman