首先:Here is a plunk。
目前,我正在尝试使用在SharePoint网站上托管的AngularJS构建基本注册应用。我正在用这样的工厂提取当前的用户数据:
app.factory('Data', function ($http, $log) {
return {
getCurrentUser: function (complete, failure) {
jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/Web/currentUser",
type: "GET",
dataType: "json",
headers: {
"Accept": "application/json;odata=verbose"
},
success: function (data) {
complete(data.d);
},
error: function (data) {
failure(data);
}
});
}
然后我使用控制器将结果(在本例中为用户标题)分配给值:
app.controller('IndexCtrl', function ($scope, Data) {
Data.getCurrentUser(function (user) {
CurrentUser = user.Title;
});
现在,我遇到的问题是CurrentUser
的值在工厂的所有部分都不可用。现在,一切都在一个工厂和一个控制器。所以,我可以使用CurrentUser
创建一个这样的新约会:
app.factory('Data', function ($http, $log) {
return {
updateAppointment: function (appointment) {
var Title = appointment.Title;
var Appointment = appointment.Appointment;
var CurrentSpots = appointment.Openings;
var Id = appointment.Id;
// Create new Reservations list item
jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/Web/Lists/getByTitle('SharePointList')/Items",
type: "POST",
data: JSON.stringify({
"__metadata": { type: "SP.Data.SharePointListItem" },
Title: Title,
Appointment: Appointment,
Colleague: CurrentUser,
AppointmentId: Id
}),
headers: {
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
},
success: function (data, textStatus, jqXHR) {
},
failure: function (jqXHR, textStatus, errorThrown) {
var response = JSON.parse(jqXHR.responseText);
var message = response ? response.error.message.value : textStatus;
alert("Error: " + message);
}
});
但是当我尝试在这样的事情中执行包含CurrentUser
值的查询时,我似乎无法使用它:
app.factory('Data', function ($http, $log) {
return {
getCurrentAppointment: function (successCallback) {
$http({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/Web/Lists/getByTitle('SharePointList')/Items?$filter=User eq '" + CurrentUser + "'",
method: "GET",
dataType: "json",
async: "true",
headers: {
"Accept": "application/json;odata=verbose"
}
})
.success(function (data, status, headers, config) {
successCallback(data.d.results);
})
.error(function (data, status, headers, config) {
$log.warn(data, status, headers, config);
});
}
无论我尝试过什么,它始终会为我提供undefined
返回的CurrentUser值。任何帮助,将不胜感激。提前谢谢!
答案 0 :(得分:0)
您没有证明您宣布CurrentUser
的位置(例如var CurrentUser;
)(我无法看到)。
我相信你没有使用全局变量(邪恶)。
此外,还不清楚您在何处调用访问CurrentUser的工厂方法。您正在控制器中的Data.getCurrentUser
调用内分配CurrentUser。假设您已在某个地方声明了该函数之外的CurrentUser,则在异步请求完成之前不会分配它。我建议重构您的方法updateAppointment
以接收CurrentUser
参数,而不是依赖于外部范围。