मैं वर्तमान में अपने आप को Angular2S टाइप करने की कोशिश कर रहा हूँ और पिछले 4 वर्षों से AngularJS 1. * के साथ टाइपस्क्रिप्ट काम कर रहा हूँ! मुझे यह मानना होगा कि मैं इससे नफरत कर रहा हूं, लेकिन मुझे यकीन है कि मेरा यूरेका पल कोने के आसपास ही है ... वैसे भी, मैंने अपने डमी ऐप में एक सेवा लिखी है जो पीएचएन बैकएंड से http डेटा प्राप्त करेगा जो मैंने लिखा था कि JSON परोसता है।
import {Injectable} from 'angular2/core';
import {Http, Headers, Response} from 'angular2/http';
import {Observable} from 'rxjs';
@Injectable()
export class UserData {
constructor(public http: Http) {
}
getUserStatus(): any {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.get('/restservice/userstatus', {headers: headers})
.map((data: any) => data.json())
.catch(this.handleError);
}
getUserInfo(): any {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.get('/restservice/profile/info', {headers: headers})
.map((data: any) => data.json())
.catch(this.handleError);
}
getUserPhotos(myId): any {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.get(`restservice/profile/pictures/overview/${ myId }`, {headers: headers})
.map((data: any) => data.json())
.catch(this.handleError);
}
private handleError(error: Response) {
// just logging to the console for now...
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
अब एक घटक में मैं (या श्रृंखला) दोनों getUserInfo()
और getUserPhotos(myId)
विधियों को चलाना चाहता हूं । AngularJS में यह मेरे नियंत्रक के रूप में आसान था, मैं "कयामत के पिरामिड" से बचने के लिए कुछ ऐसा करूंगा ...
// Good old AngularJS 1.*
UserData.getUserInfo().then(function(resp) {
return UserData.getUserPhotos(resp.UserId);
}).then(function (resp) {
// do more stuff...
});
अब मैंने अपने कंपोनेंट (रिप्लेस ) में कुछ ऐसा ही करने की कोशिश की है .then
, .subscribe
लेकिन मेरी गलती कंसोल पागल हो रही है!
@Component({
selector: 'profile',
template: require('app/components/profile/profile.html'),
providers: [],
directives: [],
pipes: []
})
export class Profile implements OnInit {
userPhotos: any;
userInfo: any;
// UserData is my service
constructor(private userData: UserData) {
}
ngOnInit() {
// I need to pass my own ID here...
this.userData.getUserPhotos('123456') // ToDo: Get this from parent or UserData Service
.subscribe(
(data) => {
this.userPhotos = data;
}
).getUserInfo().subscribe(
(data) => {
this.userInfo = data;
});
}
}
मैं स्पष्ट रूप से कुछ गलत कर रहा हूं ... मैं ऑब्जर्वबल्स और आरएक्सजेएस के साथ कैसे सर्वश्रेष्ठ करूंगा? क्षमा करें अगर मैं बेवकूफ सवाल पूछ रहा हूँ ... लेकिन अग्रिम में मदद के लिए धन्यवाद! मैंने अपने HTTP हेडर की घोषणा करते समय अपने कार्यों में बार-बार कोड भी देखा है ...