2016-04-06 10 views
0

UPDATE: Üzgünüm, kodumun yanlış sürümünü kopyaladım: hizmetin içinde şimdi gösterildiği gibi then'u aradım.Angular2, alay verisiyle ilgili verileri alamıyor

Sahte veri sağlayan bir hizmet oluşturuyorum (here ile benzer bir yapı takip ediyor) ancak bazı nedenlerle veri alamıyor.

import {Injectable} from 'angular2/core'; 
import {MOCK_DATA} from './mock-data'; 

@Injectable() 
export class DataService{ 
    getData(){ 
    return Promise.resolve(MOCK_DATA).then(data => data); 
    } 
} 

sahte verileri:

export var MOCK_DATA = { 
    "apple": [ 
    {"taste": "apple", "really": false}, 
    {"taste": "random", "really": true}, 
    ], 
    "orange": [ 
    {"taste": "orange", "really": false}, 
    {"taste": "random", "really": true}, 
    ], 
} 

console.log sonuçlar ancak aşağıdaki gibidir: AppComponent gelen

pasajı

export class AppComponent implements OnInit{ 
    ngOnInit(){ 
    this.getData(); 
    } 


    constructor(private _dataService: DataService){ } 

    getData(){ 
     console.log('get data called'); 
     var data = this._dataService.getData(); 
     console.log('data type is '+typeof(data)); 
     console.log('data key is '); 
     for(var k in data){ 
     console.log(k); 
     } 

DataService olan

get data called 
app.component.ts:46 data type object 
app.component.ts:47 data key 
app.component.ts:49 __zone_symbol__state 
app.component.ts:49 __zone_symbol__value 
app.component.ts:49 then 
app.component.ts:49 catch 
+0

ben size 'AppComponent' içine' RBACService' içe ve onun kurucu enjekte etmek gerektiğini düşünüyorum. – bhanu

cevap

1

Sen veri almaya muktedir getData yöntemi tarafından döndürülen sözü then yöntemini çağırmanız gerekir: then yöntem hizmetinde bileşeni içinde kullanılan ve kullanılması gerektiğini

getData() { 
    console.log('get data called'); 
    this._dataService.getData().then(data => { 
    // Handle the data 

    // For example 
    console.log('data type is '+typeof(data)); 
    console.log('data key is '); 
    for(var k in data){ 
     console.log(k); 
    } 
    }); 
} 

.

Servis olmalıdır:

@Injectable() 
export class RBACService{ 
    getData(){ 
    return Promise.resolve(MOCK_DATA); 
    } 
} 

yerine

@Injectable() 
export class RBACService{ 
    getData(){ 
    return Promise.resolve(MOCK_DATA).then(data => data); 
    } 
} 
+0

"o zaman" yöntemi servis dışında kullanılmalıdır ;-) Sizin durumunuzda hizmetin içinde ... –

+0

zaten Servisin içinde kullanmak için var mı? Böylece bir veri yerine gerçek verileri döndürüyor? Arayanın hizmetin yerine söz vermesi iyi bir şey olduğunu duydum, çünkü arayanın verilerin nasıl geçtiğini bilmesi gerekmiyor (gelecekte Gözlemlenebilir olarak değişebiliriz). Tekrar teşekkürler! – totoro

+0

Rica ederim! Verilerinizi eşzamanlı olarak alırsanız, söz vermenize/gözlemlenmenize gerek yoktur ve verileri doğrudan geri gönderebilirsiniz. Çoğu durumda, bu, HTTP isteklerinden, bu nedenle zaman uyumsuz olduğunu ve her ikisine de ihtiyacınız olduğunu söyledi. –

1

Sana, AppComponent için dekoratör böyle bir şey kodunuzun bazı önemli kısmını eksik düşünüyorum:

(serviceName), inyectable s dosyanızın dosya adı olmalıdır. ervice ve DataService olarak yapıcı adresten inyected ve aslında RBACService denir neden dışarı whatch ...

+0

teşekkürler.isim uyuşmazlığı için üzgünüm; onları daha genel hale getirmek için onları SO sorusunda değiştirdim, bu yüzden sorunun gerçek sebebi değildi. – totoro