我在$ scope上声明了一个控制器和变量。
我有两个包含对象的数组,一个包含可用组,另一个包含用户已经属于的组。函数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>
我仍然是Angular的新手,并试图找出最好的方法来做到这一点。谢谢。
编辑:另外,我这样做的传统方式只是将$ scope.asignedGroups传递给函数并且它可以工作,但是即使ng-option应该监听更改为assignedGroups,DOM也不会更新。我看到已分配的组在Batarang中发生了变化,但DOM却没有。<select id="entityAssigned" multiple
ng-model="selectedAssignedGroups"
ng-options="g.name for g in assignedGroups | orderBy:'name'">
</select>
答案 0 :(得分:0)
类似下面的代码。
所以基本上,你通知angular你想在你的服务中使用$ scope。
_app.services.YourService = function ($scope) {
var addUserToGroup = function (selectedUser, selectedAvailableGroups) {
var assignedGroups = $scope.assignedGroups;
}
}
_app.services.YourService.$inject = ['$scope'];
希望它有所帮助。