2016-04-19 13 views
0

URLSearchParams()と表示される奇妙な問題があります。var search(つまり、変数名をvar otherNameに変更した場合)を定義した場合にのみ機能します。URL2のURLSearchParams()で奇妙な問題が発生する

ただし、何らかの理由で、名前がsearchの場合にのみ機能します。それはまったく論理的ではありません。

ここで何が起こっているかについてのアイデアはありますか?

constructor(http) { 
    this.http = http; 
    this.genre = null; 
    this.dishes = null; 

    //this one works fine 
    var search = new URLSearchParams(); 
    search.set('order', '-ordersNo'); 

    //Here is the issue (to make it work, I need to remove the previous search declaration, and rename the below var limit to search) 
    var limit = new URLSearchParams(); 
    limit.set('limit', '2'); 

    this.http.get('https://example.com/classes/Mn', { limit }).subscribe(data => { 
    this.dishes = data.json().results; 
    }); 


    this.http.get('https://example.com/classes/Genre',{ search }).subscribe(data => { 
    this.genre = data.json().results; 
    }); 

答えて

1

私はあなたが実際にこのようにそれを持ってしたいと思います:HTTPのGETメソッドは次のシグネチャを持つ必要がありますの

{ search: search } 

//and 

{ search: limit } 

optionsパラメータ:

export interface RequestOptionsArgs { 
    url?: string; 
    method?: string | RequestMethod; 
    search?: string | URLSearchParams; 
    headers?: Headers; 
    body?: string; 
} 

しかし{limit }は実際には同じです{ limit: limit }となります。

+0

詳細を教えてください。 –

+0

あなたの提案はうまくいっていますが、検索を別の名前に変更すると、それが動作を停止する理由がわかりません!本当に奇妙な!! –

1

実際には、JavaScriptのショートカットです。{ search }は、{ search: search }{ limit }から{ limit: limit }に相当します。

Angular2はクエリパラメータを定義するのにsearchプロパティが必要であるため、最初のケースで正常に動作します。 limit変数を使用する場合は、このショートカットを使用することはできません。{ search: limit }を使用する必要があります。

+0

{search:limit}はうまくいきます!しかし、 'var search'を削除しているもう一つのシナリオを見てみましょう。検索は予約ですか、それとも何ですか? –

+0

Angular2に渡すオブジェクトの構造は、 'RequestOptionsArgs'インタフェースで@kemskyが述べたように記述されています...' limit'はAngular2によってサポートされているプロパティではありません... –

関連する問題