javascript - Egenskaben 'subscribe' findes ikke på typen 'void'. Angular 2 asp.net core
Jeg får følgende fejl, når jeg prøver at bruge subscribe. Jeg havde det samme problem med .map, men jeg løste det ved at erstatte følgende fil https://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518/lib/typescriptServices.js
Jeg har opdateret Typescript til 1.8.6 og opdateret Visual Studio 2015 til opdatering 3.
Jeg har ingen idé om, hvordan jeg skal løse dette problem, eller om jeg gør noget forkert, jeg har også tilføjet
import 'rxjs/Rx';
til bootstrap- og app.component-klasserne og stadig samme fejl.
servicekode:
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 hvor tjeneste bruges:
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-fil:
{
"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"
}
}
Svar #1
Du glemte at returnere i din get(). Kapsl heller ikke kroppen af lambda-funktioner uden at returnere noget. En implicit returnering sker, hvis du bare gør response => response.json(). Ellers skal du skrive det sådan her: response => { return response.json(); }.
Her er en forbedret version af din metode:
get() {
// return this.mediaItems;
return this.http.get("/api/MediaItem").map(response => response.json());
}
Spring også bare this.http=http; over i din constructor. At skrive public eller private foran constructor-argumentet tilføjer det allerede som et klassemedlem.
