我有一个控制器和$ scope上声明的变量。如何获取访问Controller中的变量的服务?
我有两个数组存放对象,一个包含可用组,另一个包含用户已经属于的组。功能addUserToGroups()
向服务器发出呼叫以接受选定的组并将用户添加到这些组中。但后来我需要更新我的Dom上的两个数组以反映变化。但是,该服务给我一个错误,assignedGroups
数组未定义。
控制器:
spApp.controller('userCtrl',
function userCtrl($scope,userService,groupService){
//Generate list of all users on the SiteCollection
$scope.users = userService.getUsers();
$scope.selectedAvailableGroups;
$scope.selectedAssignedGroups;
$scope.availableGroups;
$scope.assignedGroups;
//Boolean used to disable add/remove buttons
$scope.selectedUser = false;
$scope.addUserToGroup = function(){
userService.addUserToGroup($scope.selectedUser, $scope.selectedAvailableGroups)
};
}
);
我一直在传递这些对象到控制器功能,因此该服务可以使用他们,我敢肯定,这将在这里工作为好,但就是真的是最好的方式去它?我觉得我只是在该控制器内创建一堆全局变量。可以吗?
服务:
spApp.factory('userService', function(){
var addUserToGroup = function (selectedUser, selectedAvailableGroups) {
var addToGroupPromises = [];
var selectedGroupsLength = selectedAvailableGroups.length
//Add user to selected groups on server
for (var i = 0; i < selectedGroupsLength; i++) {
addToGroupPromises[i] = $().SPServices({
operation: "AddUserToGroup",
groupName: selectedAvailableGroups[i].name,
userLoginName: selectedUser.domain
});
};
//when all users added, update dom
$.when.apply($,addToGroupPromises).done(function(){
for (var i = 0; i < selectedGroupsLength; i++) {
assignedGroups.push(selectedAvailableGroups[i]);
//groupsAvailable.pop(selectedAvailableGroups[i]);
};
alert(selectedUser.name + " added to: " + JSON.stringify(selectedAvailableGroups));
});
};
});
HTML:
<button type="button" ng-disabled="!selectedUser" ng-click="addUserToGroup()">Add User</button>
我还是很新的角度和试图找出做到这一点的最好办法。谢谢。
编辑:此外,我做传统的方式只是将$ scope.asignedGroups传递到函数中,它的工作原理,但即使ng选项应该正在侦听更改为assignedGroups DOM不更新。我看到Batarang中的assignedGroups更改,但DOM不。
<select id="entityAssigned" multiple
ng-model="selectedAssignedGroups"
ng-options="g.name for g in assignedGroups | orderBy:'name'">
</select>
是否有理由不能创建一个额外的函数参数来接受assignedGroups以便在服务中使用? – Hatjhie
不,不是真的。我只是想知道是否有一些我错过的Angular功能会让这个更简单。使用Angular的时候,所有东西都看起来如此插入,我想如果一个变量在控制器中是全局变量,并且服务被注入到控制器中,服务应该能够读取全局变量,而不必为每个服务函数传递参数。 – Batman
如果没有,那很好。我只是想确保我以最好的方式做到这一点。 – Batman