webentwicklung-frage-antwort-db.com.de

Die Eigenschaft 'subscribe' ist beim Typ 'void' nicht vorhanden. Angular 2 asp.net Kern

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, subscribe zu verwenden. Ich hatte das gleiche Problem mit .map, aber ich löste dieses Problem, indem ich die folgende Datei ersetzte https://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518/lib/typescriptServices.js

Ich habe TypeScript auf 1.8.6 und Visual Studio 2015 auf Update 3 aktualisiert.

Ich habe keine Ahnung, wie ich dieses Problem beheben kann oder ob ich etwas falsch mache, habe ich hinzugefügt 

import 'rxjs/Rx'; 

an die Bootstrap- und app.component-Klassen und immer noch den gleichen Fehler.

service code:

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() });
}
}

klasse, in der der Dienst verwendet wird:

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 Datei:

{
"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"

}
}
15
user5049376

Sie haben vergessen, in Ihrer get() zurückzukehren. Verkapseln Sie auch nicht den Körper der Lambda-Funktionen, ohne etwas zurückzugeben. Eine implizite Rückgabe geschieht, wenn Sie einfach response => response.json() ausführen. Ansonsten musst du es so schreiben: response => { return response.json(); }.

Hier ist eine verbesserte Version Ihrer Methode:

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

Lassen Sie einfach den this.http = http; in Ihrem Konstruktor aus. Wenn Sie public oder private vor dem Konstruktorargument schreiben, wird dies bereits als Klassenmitglied hinzugefügt.

39
rinukkusu

Ihre get () - Funktion gibt das Observable nicht zurück -> nichts zum Abonnieren . Versuchen Sie:

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