将范围变量传递给服务的更简单方法?

时间:2014-01-21 23:17:26

标签: javascript angularjs model-view-controller

我有一个带有许多$ scope.variables

的控制器
$scope.users = userService.getUsers();
$scope.selectedAvailableGroups;
$scope.selectedAssignedGroups;
$scope.availableGroups;
$scope.assignedGroups;

我的控制器中有函数使用服务,服务需要传递给它的参数:

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

你有没有看到,removeUserFromGroup函数有4个参数,但名字很长,看起来效率不高。

这真的是最好的方法吗?或者我做错了什么?

我有一个名为addUserToGroup的函数,它基本上使用完全相同的参数,似乎是多余的,我需要再次将该信息传递给服务。

2 个答案:

答案 0 :(得分:1)

虽然它实际上取决于应用程序,但是您的范围中的变量可能更多地与业务逻辑有关,并且应该存储在服务中。如果视图需要它们,则控制器可以访问服务中的变量并对其进行调整,但不需要将它们全部发送回服务,除非它们发生变化。

答案 1 :(得分: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
    });
};