AngularJS:将数据从Controller传递到Service

时间:2014-04-17 23:30:06

标签: angularjs sharepoint-2013

首先: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值。任何帮助,将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您没有证明您宣布CurrentUser的位置(例如var CurrentUser;)(我无法看到)。

我相信你没有使用全局变量(邪恶)。

此外,还不清楚您在何处调用访问CurrentUser的工厂方法。您正在控制器中的Data.getCurrentUser调用内分配CurrentUser。假设您已在某个地方声明了该函数之外的CurrentUser,则在异步请求完成之前不会分配它。我建议重构您的方法updateAppointment以接收CurrentUser参数,而不是依赖于外部范围。