我有一个angular2(带有angular-cli)应用程序,它将存在于由CMS(DotnetNuke)提供的网站的网页中。这个web cms使用jquery的服务框架为api调用网站的“后端”生成验证令牌。因此,在拥有此验证令牌之前,我无法生成任何对网站的web api调用。
我创建了一个服务来处理对网站api的调用。在服务的构造函数中,我尝试以下列方式设置令牌(ServicesFramework对象有一个名为getAntiForgeryValue的函数,它返回令牌):
@Injectable()
export class ApiService {
private http: Http;
constructor(http: Http)
{
console.log('dnn service constructor');
$(document).ready(function () {
this._dnnSF = $.ServicesFramework(804);
});
}
getRequestVerificationToken(): any {
return this._dnnSF.getAntiForgeryValue();
};
}
ServicesFramework的 getAntiForgeryValue()只返回对.net web api端点的ajax调用的jQuery __ RequestVerificationToken 。 这只是为了解释。
注入此服务的其他组件是在document.ready在服务的构造函数中完成之前调用 getAntiForgeryValue(),因此我得到了:
无法读取未定义
的属性'getAntiForgeryValue'
问题: 有人可以帮我制定一个带有angular2的策略,我可以等待在角度应用程序运行之前提供此验证令牌,或者如何在服务中等待构造函数完成。
提前致谢
答案 0 :(得分:1)
该错误意味着:$ .ServicesFramework未定义。你需要找到一种方法将它注入Angular世界。一种方法(不推荐但很快)是在Angular之外的全局范围内声明它:
window.framework = $.ServicesFramework;
然后在服务的顶部声明它:
const framework;
然后在你的构造函数中你可以这样做:
constructor(http: Http)
{
this._dnnSF = framework;
}
列表我说这很快又脏。更好的方法是在引导Angular应用程序时注入外部组件。