Как передать значение из функции js Office в функцию углового синтаксиса - PullRequest
0 голосов
/ 25 сентября 2018

Я создал Office Web Addin в Angular 5, и теперь я работаю с Office Rest Api, я следовал инструкциям из Использование rest Api в Addins

Из документации этоочищается, что мы можем вызвать остальные api url с токеном, который мы получаем из функции, которая написана внутри Angular's ngOnInit () в myComponent.ts

Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
if (result.status === "succeeded") {
var accessToken = result.value;

// Use the access token
   getCurrentItem(accessToken);
  } else {
// Handle the error
  }
});

Из приведенного выше кода я являюсьПолучив accessToken успешно, я напечатал его в консоли. Теперь, но проблема в том, что я использую Angular 5, поэтому синтаксис между ними конфликтует, потому что, если я создаю функцию с именем

getCurrentItem(accessToken) в классе Angular 5Я должен вызвать его как this.getCurrentItem(accessToken) внутри выше, который выдает ошибку, что

'this' is not defined

В этом случае я попытался установить accessToken в localStorage и получить его из функции checkAccessToken как

 Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
  if (result.status === "succeeded") {
    accessToken = result.value;
    localStorage.setItem('apiAccessToken',accessToken)
   // console.log(result.status)
   //this.getCurrentItem(accessToken)

  } else {
    console.log(result.status);
  }
});

 getAccessToken(){
   apiAccessToken:any = localStorage.getItem('apiAccessToken');
   console.log("API_Access_token : "+apiAccessToken);
 } 

Итак, теперь внутри консоли я получаю INCOMPLETE Access_token, потому что я получаю отказ в доступе при любом вызове rest, который я вызывал вв первый раз, в следующий раз, когда я снова вызываю тот же URL отдыха с токеном, он работает, потому что на этот раз он получает полный токен доступа Api.

Я могу понять, что это происходит, потому что до ожидания office getCallBackTokenAsync () функция для завершения, функция getAccessToken () вызывается.

Даже я не могу вызвать getAccessToken () внутри офисной функции, потому что ей нужно this.getAccessToken () , что неприемлемо для офисной функции, которая возвращает AccessToken, поэтому есть ли другой способ получить его или дождаться, пока getCallBackTokenAsync () офисная функция завершит свой вызов

1 Ответ

0 голосов
/ 27 сентября 2018

getCallbackTokenAsync принимает необязательный параметр с именем options, который поддерживает свойство asyncContext.Вы можете передать экземпляр вашего объекта, который имеет метод getCurrentItem.В вашей функции обратного вызова этот объект будет доступен в параметре результата.Подробнее здесь .

Вот пример кода, который поможет вам:

let foo = new Foo();

Office.context.mailbox.getCallbackTokenAsync
(
    {
        "isRest" : false,
        "asyncContext" : foo
    },

    function (result)
    {
        if (asyncResult.status === Office.AsyncResultStatus.Succeeded)
        {
            let accessToken = result.value;
            localStorage.setItem('apiAccessToken',accessToken);
            console.log(result.status);
            result.asyncContext.getCurrentItem(accessToken);
        }
        else
        {
            console.log(result.status);
        }
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...