2016-10-11 9 views
3

.NETコントローラ(.NET MVC 4.5.2を使用しています)へのHTTP要求に対してJQueryを使用していましたが、現在はAngular 2を使用し始めています。 JQuery AJAXはAngular 2を代わりに呼び出します。ここではjQueryのは私が望んでいただけのように働いている、以前に使用していました:JQueryのAJAX呼び出しをAngular 2サービスに変換する

$.get('/Plan/Variety/ListVarietiesInMenuForSelling') 
    .done(function(data){ 
     console.log(data) 
    }); 

私は同じことを達成するために、私の角度2サービスを設定するにはどうすればよいですか?私は以下のコードを試しました:

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import 'rxjs/add/operator/toPromise'; 

@Injectable() 
export class SellingMenuVarietiesService { 
    private url = '/Plan/Variety/ListVarietiesInMenuForSelling'; // URL to web api  

    constructor(private http: Http) { } 

    getVarieties() { 
     return this.http.get(this.url); 
    }  
} 

残念ながら、これは動作しません。その代わり、私は、コンソールにこのエラーが表示されます。

EXCEPTION: Uncaught (in promise): TypeError: Cannot read property '0' of undefined  core.umd.js:3462 

私はJSONデータを処理し、データを解析し、HTMLにそれをフォーマットするアンギュラ使用を見つけることができました唯一の例。私のコントローラは必要なHTMLを返すので、AngularはJSONを解析する必要はありません。私がJQueryを使用していたときと同じようにhttpリクエストを取得するにはどうすればよいですか?

テスト目的のために、return this.http.get(this.url);return '<h1>test data</h1>';に変更し、正しく表示することができたので、唯一の問題はhttp要求であることがわかりました。 EDIT

:ここに は、私がgetVarieties()を呼び出すコードです:

export class SellingMenuVarietiesComponent implements OnInit { 
    varietyListSelling: any;  

    constructor(
     private router: Router, 
     private sellingMenuVarietiesService: SellingMenuVarietiesService) { }  

    ngOnInit(): void {   
     this.varietyListSelling = this.sellingMenuVarietiesService.getVarieties(); 
     console.log('initializing SellingMenuVarietiesComponent'); 
    } 
} 

そして、ここで私はHTMLにバインドする方法である:私は代わりの{{varietyListSelling}}は、私は必要があるためという使用

<div [innerHtml]="varietyListSelling"></div> 

HTMLに変換される文字列

UPDATE

私は活字体をアップグレードして、新しいエラーが生じているapp.module.ts、から私のInMemoryWebApiModuleとInMemoryDataServiceの輸入を削除しました。エラーは次のようになります。EXCEPTION: Unexpected token < in JSON at position 4

これは、私のHTMLデータをJSONに変換するためですか?私のJQueryがやっていたように、どうすればHTMLを返すことができますか?

+0

getVarieties()関数を呼び出す場所にコードを追加できますか? – Sefa

+0

投稿を編集しました – Brett

答えて

1

あなたはこのような何か行うことができます。サービスを消費するために、その後

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import 'rxjs/add/operator/toPromise'; 
import { Observable } from 'rxjs/Observable'; 

@Injectable() 
export class SellingMenuVarietiesService { 
    private url = '/Plan/Variety/ListVarietiesInMenuForSelling'; // URL to web api  

    constructor(private http: Http) { } 

    public getVarieties(): Observable<any> { 
     return this.http.get(this.url).map(response=>{return response}); 
    }  
} 

を:

this.sellingMenuVarietiesService.getVarieties().subscribe(res => { 
    console.log(res); 
    }); 

更新:

あなたがレンダリングしようとしているHTMLがありませんテンプレートがレンダリングされているときに要求が完了していないためです。このための可能な解決策は、ngIfをdivタグに追加することです。

div *ngIf="varietyListSelling" [innerHtml]="varietyListSelling"></div> 
+0

ビルド時にエラーが発生しました。 'res'は暗黙的に 'any'型を持っています。 – Brett

+0

I chang (res:any)へのresとその世話をしているようだが、今私は言う: "Observable"という名前を見つけることができません – Brett

+0

それをインポートします。私はこの例でそれを修正しました。 –

1

実際にリクエストを送信して応答を読むには、登録する必要があります。

getVarieties() { 
     return this.http.get(this.url).map((response: Response) => { 
       return response.json(); 
      },(error) => { 
       console.log(error); 
       //your want to implement your own error handling here. 
      }); 
    } 

そして、あなたのコンポーネントは、 『観測』「名 『レスポンス』を見つけることができません」と「プロパティ 『マップ』の種類には存在しません

ngOnInit(): void {   
     this.sellingMenuVarietiesService.getVarieties().subscribe((res) => { 
      this.varietyListSelling = res; 
     }); 
     console.log('initializing SellingMenuVarietiesComponent'); 
    } 
+0

このコードを使用するには、何かをインポートする必要がありますか?ビルドエラーが発生しています。たとえば、「名前 'Response'を見つけることができません」、「Property 'map」がタイプ' Observable 'に存在しません – Brett

+0

完全な取得例についてはこれをご覧くださいhttp://stackoverflow.com/documentation/angular2/7343/crud -in-angular2-restful-api#t = 201610111953558637191 – Sefa

+0

私は欠けていたものをインポートしたので、ビルドエラーはなくなりましたが、ブラウザのコンソールでこのエラーが発生しています:EXCEPTION:Uncaught(promise): TypeError:未定義のプロパティ '0'を読み取ることができません – Brett

0

ようになり、私は同じ問題を持っていますが、そうではありません問題が発生しましたが、エラー.mapが表示されていますが、その作業は

関連する問題