2014-04-17 5 views
0

Первый: Here is a plunk.AngularJS: Передача данных с контроллера на обслуживание

В настоящее время я пытаюсь создать базовое приложение для регистрации с помощью AngularJS, размещенного на сайте SharePoint. Я потянув текущие пользовательские данные с завода примерно так:

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); 
       } 
      }); 
     } 

Затем я использую контроллер для назначения результатов (в этом случае пользователь Title) на значение:

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

Где находится CurrentUser? И почему вы создаете 2 фабрики под названием Data? –

+0

На самом деле я просто разместил полный контекст, чтобы помочь визуализировать структуру, но я понимаю, что, возможно, это было более запутанно. Все они находятся под одной большой фабрикой. Я опубликую плунж, поскольку, по-моему, фрагменты, возможно, принесли больше вреда, чем пользы. – TheHouseplant

ответ

0

Вы не демонстрируете, где вы объявляете CurrentUser (например, var CurrentUser;) (я не мог его увидеть).

Надеюсь, вы не используете глобальную переменную (зло).

Также неясно, где вы вызываете эти заводские методы, которые обращаются к CurrentUser. Вы назначаете CurrentUser внутри вызова Data.getCurrentUser в контроллере. Предполагая, что вы внедрили CurrentUser вне этой функции, он не будет назначен до завершения асинхронного запроса. Я бы предложил рефакторинг вашего метода updateAppointment, чтобы получить параметр CurrentUser вместо того, чтобы полагаться на внешнюю область.

+0

[Здесь находится плунк] (http://plnkr.co/edit/s4ldUjcnkamSc3lLEILd). Это должно помочь, но я начинаю понимать, что могло произойти ... – TheHouseplant

+0

Я пытаюсь сделать то же самое - используя rest api для получения текущего идентификатора пользователя и текущего имени пользователя из sharepoint 2013. Как вы могли решить проблему – DkDev

Смежные вопросы