如何在angular2中获取下一个angular.callbacks.counter

时间:2016-07-15 12:39:14

标签: angular

要实现Yelp API,需要签名。因此,应该在传递将要使用的URL的所有参数时生成此签名。

长话短说,因为我在jsonp的帮助下查询API,所以技巧是首先生成下一个JSONP回调ID,将其包含在签名生成中(参考:how to custom set angularjs jsonp callback name?

在Angular 1中,类似于:

// Prepare parameters
var callbackId = (<any> angular).callbacks.counter.toString(36);
// Update my params with: callback='angular.callbacks._' + callbackId
// Query my backend to generate a signature
// Query Yelp API

现在我正在迁移到angular2,我也要移植那个伏都教魔法。任何人都知道我怎么能查询下一个jsonp回调ID,它将分别使用如何替换

(<any> angular).callbacks.counter

在angular2?

我看到BrowserJsonp包含nextRequestID(),但我没有找到一种方法来访问它(如果我没错,那就是私人工厂)。

P.S。:为了记录,我找到了

angular.callbacks._ID

应该用我的angular2替换为

__ng_jsonp__.__reqID.finished

1 个答案:

答案 0 :(得分:0)

在这个问题上挖掘一点,我没有找到任何其他解决方案,而不是编写我自己的@Injectable服务,在那里我执行我的app的所有jsonp查询并递增我自己的计数器来计算jsonp回调(类变量,只有一个实例允许我有那个计数器。)

的伪代码:

@Injectable()
export class JsonpService {
    private counter:number=0;

    private query1() {
         this.jsonp.get(url, options).then(() => {
             counter++;
         }, () => {
             counter++;
         });
    }

    private getActualJsonpCallbackCounter() {
        return counter; 
    }
 }

但是,我发现这个解决方案非常难看,因此我将我的应用程序从使用V2迁移到Yelp的V3 API。 Yelp API V3实现了OAuth2(以及更多OAuth1),它不会要求加密所有URL,也不需要那些丑陋的技巧。

注意:从V2迁移到V3时,我不得不使用&#34; jsonp&#34;请求&#34;得到&#34;请求(必须在请求的标头中添加OAuth2授权)。因此,我遇到了一些CORS问题,在后面的帖子中解决并记录了

Angular2 Yelp API CORS error