我已经在Angular 5中构建了一个Office Web Addin,现在我正在使用Office Rest Api,我遵循了use rest Api in Addins中的in文档
从文档中可以清楚地看出,我们可以使用令牌获取其余的api网址,该令牌是从在myComponent.ts
的Angular的 ngOnInit()中编写的函数中获得的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
在这种情况下,我尝试在localStorage中设置accessToken并从类似的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调用都被拒绝访问,下一次我再次使用令牌调用相同的REST URL,因为它这次获得了完全访问权限Api令牌。
我可以理解,这是因为在等待Office getCallBackTokenAsync()函数完成之前,函数 getAccessToken()被调用了。
即使我不能在office函数中调用 getAccessToken(),因为它需要 this.getAccessToken(),这对于返回AccessToken的office函数是不可接受的,在那里实现它或等待 getCallBackTokenAsync() Office函数完成其调用的任何其他方式
答案 0 :(得分:1)
getCallbackTokenAsync
接受一个名为options
的可选参数,该参数支持asyncContext
属性。您可以传入具有getCurrentItem
方法的对象实例。在您的回调函数中,该对象将在result参数中可用。更多信息here。
以下示例代码可为您提供帮助:
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);
}
}
);