У меня есть контроллер и переменные, объявленные в $ scope.Как получить услугу для доступа к переменным в контроллере?
У меня есть два массива, содержащих объекты, один из которых содержит доступные группы, а другой содержит группы, к которым пользователь уже принадлежит. Функция addUserToGroups()
делает вызов на сервер, чтобы отобрать выбранные группы и добавить пользователя в эти группы. Но тогда мне нужно обновить два массива на моем Доме, отражая изменения. Однако служба сообщает мне об ошибке, что массив 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>
Я все еще очень новый Угловое и пытается выяснить, лучший способ сделать это. Благодарю.
EDIT: Кроме того, я сделал это традиционным способом просто передать $ scope.asignedGroups в функцию, и он работает, но DOM не обновляется, хотя ng-параметр должен прослушиваться для измененных назначенных групп. Я вижу, что назначенные группы меняются в Batarang, но DOM этого не делает.
<select id="entityAssigned" multiple
ng-model="selectedAssignedGroups"
ng-options="g.name for g in assignedGroups | orderBy:'name'">
</select>
Есть ли причина, почему вы не могли создать один дополнительный аргумент функции для приема назначенных групп для использования в Сервисе? – Hatjhie
Нет, не совсем. Мне просто интересно, есть ли какая-то Угловая функция, которую я пропускаю, что сделало бы это проще. С Angular все кажется настолько включенным, что я думал, что если переменная была глобальной в контроллере, и служба была введена в этот контроллер, служба должна иметь возможность читать глобальные переменные без необходимости передавать в качестве аргументов для каждой функции обслуживания. – Batman
Если нет, все в порядке. Я просто хотел убедиться, что я делаю это наилучшим образом. – Batman