我有一個控制器和$ 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