The 'subscribe' property does not exist in the 'void' type. Angular 2 asp.net core

I get the following error when I try to use a subscription. I had the same problem with .map, but I solved it by replacing the following file https://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518/lib/typescriptServices.js

I updated Typescript to version 1.8.6 and updated visual studio 2015 for update 3.

I donโ€™t know how to fix this problem or if I am doing something wrong, I also added

import 'rxjs/Rx'; 

for classes bootstrap and app.component and all the same error.

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

where is the service used:

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

 { "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" } } 
+8
javascript angular typescript
source share
2 answers

You forgot to return to your get() . Also don't encapsulate the body of lambda functions without returning something. Implicit returns occur if you simply do response => response.json() . Otherwise, you should write it as follows: response => { return response.json(); } response => { return response.json(); } .

Here is an improved version of your method:

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

Also just leave this.http = http; in its constructor. Writing public or private before the constructor argument already adds it as a member of the class.

+26
source share

Your get () function does not return Observable -> do not subscribe anything. Try:

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

All Articles