我有一个angular2 (有角-cli)应用程序,它将存在于由CMS (DotnetNuke)提供的网站的网页中。这个web cms使用jquery的服务框架来生成对网站“后端”的api调用的验证令牌。因此,在获得此验证令牌之前,我无法生成对网站的任何web调用。
我创建了一个服务来处理对网站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();
};
}getAntiForgeryValue() of ServicesFramework只返回对.net web端点的ajax调用的jQuery jQuery。这只是为了解释。
问题:
注入此服务的其他组件在服务的构造函数中完成getAntiForgeryValue()之前调用document.ready,因此我得到:
无法读取未定义的属性“getAntiForgeryValue”
问题:可以帮助我用angular2制定一个策略,在这个策略中,我可以等待这个验证令牌在运行角应用程序之前提供,或者如何在服务中等待构造函数的完成。
提前感谢
发布于 2016-10-29 01:27:43
该错误意味着:未定义$.ServicesFramework。你需要找到一种方法把它注入角质世界。一种方法(不推荐但快速)是在角外的全局范围内声明它:window.framework = $.ServicesFramework;
然后在服务的顶部声明它:const framework;
然后在构造函数中可以这样做:constructor(http: Http) { this._dnnSF = framework; }
清单上我说这既快又脏。更好的方法是在引导角度应用程序时注入外部组件。
https://stackoverflow.com/questions/40310965
复制相似问题