2016-06-23 27 views
7

Aboneyi kullanmaya çalıştığımda aşağıdaki hatayı alıyorum. Ben .map ile aynı sorunu vardı, ama aşağıdaki dosyayı değiştirerek bu çözüldü https://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518/lib/typescriptServices.jsÖzellik 'subscribe', 'void' türünde yok. Açısal 2 asp.net çekirdek

Ben 1.8.6 için typescript güncellenmiş ve hiçbir fikrim nasıl var 3.

güncellemek için görsel stüdyo 2015 güncelledik Bu sorunu gidermek için ya ben yanlış bir şey yapıyorum, ben de bootstrap ve app.component sınıflar ve hala aynı hata

import 'rxjs/Rx'; 

ekledik.

servis kodu:

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

sınıf hizmet kullanılır:

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 dosyası:

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

} 
} 

cevap

25

. Ayrıca bir şey döndürmeden lambda işlevlerinin gövdesini de kapsama. Yalnızca response => response.json() yaparsanız örtülü bir geri dönüş gerçekleşir. Aksi takdirde bunu şöyle yazmanız gerekir: response => { return response.json(); }.

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

Ayrıca sadece yapıcı içinde this.http = http; dışarıda bırakın:

İşte yöntemin geliştirilmiş bir versiyonudur. Oluşturucu bağımsız değişkeninin önüne public veya private yazılması, onu zaten bir sınıf üyesi olarak ekler.

+0

vay aslında bu: D çok teşekkürler, bu xD – user5049376

+1

iyi cevabı unuttum inanamıyorum. Açısal 2+ ve gözlenebilirleri kullanarak, dönüş anahtar kelimelerinizi veya örtülü geri dönüşlerinizi unutmayın! veya .subscribe() senden nefret edecek – russiansummer

0

Sizin olsun() - Fonksiyon gözlemlenebilir dönmez -> abone olmak için hiçbir şey. Dene: Eğer get() dönmek unuttum

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

bu hatayı fark ettiğiniz için çok teşekkür ederim: D +1 – user5049376

+0

Aslında bu, işe yaramaz çünkü bir değeri döndürmeniz gerektiğinden, lambdalarla küme parantezleri kullanırken. – rinukkusu