抱歉,我不太知道如何表达这个问题。关键在于,在重定向回应用程序时,重定向处理程序需要有权访问注入(inject)的 UserManager。
import { autoinject } from "aurelia-framework";
import { UserManager } from "oidc-client";
import { OpenIdConnectRouting } from "./open-id-connect-routing";
@autoinject
export class OpenIdConnect {
constructor(
private routerConfigurationService: OpenIdConnectRouting,
public UserManager: UserManager) { }
public Configure(routerConfiguration: RouterConfiguration) {
this.routerConfigurationService.ConfigureRouter(
routerConfiguration,
this.PostLogoutRedirectHandler);
}
public PostLogoutRedirectHandler = (): Promise<any> => {
return this.UserManager.signoutRedirectCallback(null);
}
}
上面的代码将 PostLogoutRedirectHandler
传递给路由服务,以便当用户从授权服务器返回时,处理程序将触发。
上面的代码可以工作,但是处理程序是 lamda,仅用于捕获 this
中的当前对象。当处理程序是一个函数
时,this
不是我们期望的那样,并且我们无法访问注入(inject)的UserManager
对象。
为什么上面的代码适用于 lambda 而不适用于函数?使用 lambda 是一种合理的方法吗?如果没有,有没有办法用函数来做到这一点?
编辑:
这是上述处理程序的函数/方法版本。
public PostLogoutRedirectHandler(): Promise<any> {
this.logger.Debug("PostLogoutRedirectHandler");
return this.UserManager.signoutRedirectCallback(null);
}
它抛出以下错误:
Cannot read property 'UserManager' of undefined
当然,使用 lambda 箭头函数
是可行的。这种箭头函数
方法是合理模式还是反模式?其成本是多少?
最佳答案
您需要使用 .bind(this)
来传递 this
对象以用于回调或 Promise 等外部执行函数:
function(){
//code what will be execute out from current object
}.bind(this)
关于javascript - 访问我们传递给另一个对象的函数内的注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39678741/