在angular2服务中等待jQuery document.Ready()

时间:2016-10-28 18:16:22

标签: jquery angular angular-cli

我有一个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的策略​​,我可以等待在角度应用程序运行之前提供此验证令牌,或者如何在服务中等待构造函数完成。

提前致谢

1 个答案:

答案 0 :(得分:1)

该错误意味着:$ .ServicesFramework未定义。你需要找到一种方法将它注入Angular世界。一种方法(不推荐但很快)是在Angular之外的全局范围内声明它: window.framework = $.ServicesFramework;

然后在服务的顶部声明它: const framework;

然后在你的构造函数中你可以这样做: constructor(http: Http) { this._dnnSF = framework; }

列表我说这很快又脏。更好的方法是在引导Angular应用程序时注入外部组件。