2016-06-23 217 views
7

私はsubscribeを使用しようとすると次のエラーが発生します。私は.MAPと同じ問題があったが、私は、次のファイルhttps://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518/lib/typescriptServices.js'subscribe'プロパティが 'void'型に存在しません。 Angular 2 asp.net core

を交換して、これを解決し、私はどのように考えている1.8.6に活字を更新し、3

を更新するためのVisual Studio 2015を更新しましたこの問題を解決するか、私は何か間違ったことをやっている場合、私はまた、ブートストラップとapp.componentクラスとまだ同じエラーに

import 'rxjs/Rx'; 

を追加しました。

サービスコード:

import { Injectable } from 'angular2/core'; 
import {Http, URLSearchParams} from "angular2/http"; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class MediaItemService { 

constructor(public http: Http) { 
    this.http = http; 
} 

//functions 
get() { 
    // return this.mediaItems; 
    this.http.get("/api/MediaItem").map(response => { response.json() }); 
} 
} 

サービスが使用されているクラス:

import {Component, Inject} from 'angular2/core'; 
import 'rxjs/Rx'; 
import {MediaItemComponent} from './media-item.component'; 
import {CategoryListPipe} from './category-list.pipe'; 
import {MediaItemService} from './media-item.service'; 

@Component({ 
selector: 'media-item-list', 
directives: [MediaItemComponent], 
pipes: [CategoryListPipe], 
providers: [MediaItemService], 
templateUrl: 'app/media-item-list.component.html', 
styleUrls: ['app/media-item-list.component.css'] 
}) 
export class MediaItemListComponent { 


constructor(private mediaItemService: MediaItemService) { 

     //.subscribe(mediaItems => { 
     // this.mediaItems = mediaItems; 
     //}); 
} 

ngOnInit() { 
    this.mediaItems = this.mediaItemService.get().subscribe(mediaItems => { 
      this.mediaItems = mediaItems; 
     }); 
} 

onMediaItemDeleted(mediaItem) { 

    this.mediaItemService.delete(mediaItem); 
} 

mediaItems; 
} 

package.jsonファイル:

{ 
"version": "1.0.0", 
"name": "TestFunWithAngi", 
"private": true, 
"dependencies": { 
"angular2": "^2.0.0-beta.17", 
"systemjs": "^0.19.31", 
"es6-promise": "^3.2.1", 
"es6-shim": "^0.35.1", 
"reflect-metadata": "^0.1.3", 
"rxjs": "^5.0.0-beta.9", 
"tsd": "^0.6.5", 
"zone.js": "^0.6.12" 
}, 
"devDependencies": { 
"typescript": "^1.8.10", 
"typings": "^0.8.1", 
"grunt": "1.0.1", 
"grunt-contrib-copy": "1.0.0", 
"grunt-contrib-uglify": "1.0.1", 
"grunt-contrib-watch": "1.0.0", 
"grunt-ts": "5.5.1" 

} 
} 

答えて

25

。また、何も返さずにラムダ関数の本体をカプセル化しないでください。 response => response.json()を実行すれば暗黙の復帰が起こります。そうでなければ、response => { return response.json(); }のように書く必要があります。

get() { 
    // return this.mediaItems; 
    return this.http.get("/api/MediaItem").map(response => response.json()); 
} 

はまた、ちょうどあなたのコンストラクタでthis.http = http;を残す:

はここにあなたの方法の改良版です。コンストラクタ引数の前にpublicまたはprivateを書き込むと、すでにクラスメンバとして追加されています。

+0

うわー、それは実際には:Dは多くのおかげで、私はこのxDを忘れていると信じることはできませんxD – user5049376

+1

良い答え。 Angular 2+とobservablesを使用して、あなたのリターンキーワードや暗黙のリターンを忘れないでください!または.subscribe()はあなたを嫌いにします – russiansummer

0

あなたのget() - 関数が観測を返しません。 - >何も購読しない。 試してください:あなたは、あなたのget()に返すのを忘れて

get() { 
    return this.http.get("/api/MediaItem").map(response => { response.json() }); 
} 
+0

このエラーに気付いたことに感謝します。D +1 – user5049376

+0

ラムダで中括弧を使用するときに明示的に値を返す必要があるため、これは実際には機能しません。 – rinukkusu

関連する問題