टिप्पणी - मैं इस समस्या को हल करने के लिए, इस पोस्टकोणीय 2.0 - इंजेक्ट Http सेवा अपरिभाषित है
मैं UpgradeAdapter (ngUpgrade) का उपयोग कर मेरी कोणीय 1.x आवेदन उन्नयन कर रहा हूँ के तल में देखने में कामयाब रहे। मैं एक नया कोणीय 2.0 सेवा है जो मैं अपने कोणीय 2.0 घटक से कॉल कहा:
सेवा:
import {Inject} from 'angular2/core';
import {Http} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
export default class MyService {
_http;
constructor(http: Http) {
this._http = http; //http is undefined here
}
getData(): Observable<any> {
return this._http.get(someUrl);
}
}
अंदर मेरी bootstrap.ts
मेरे पास है:
declare var angular: any;
import {UpgradeAdapter} from 'angular2/upgrade';
import {Http} from 'angular2/http';
let adapter = new UpgradeAdapter();
adapter.addProvider(Http);
//.....
adapter.bootstrap(document.body, ['myApp']);
क्या मैं गलत यहाँ कर रहा हूँ?
संपादित:
मैं अपने कोणीय 2.0 सेवा के लिए एक और सेवा (कोणीय 1.x के लिए उन्नत सेवा) इंजेक्शन रहा हूँ, और यह काम करता है:
import {Inject} from 'angular2/core';
import {Http} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
export default class MyService {
_http;
_dataService;
constructor(@Inject('dataService') dataService, http: Http) {
this._http = http; //http is undefined here
this._dataService = dataService; //dataService is defined!!
}
getData(): Observable<any> {
return this._http.get(someUrl);
}
}
Bootstrap.ts:
declare var angular: any;
import {UpgradeAdapter} from 'angular2/upgrade';
import {Http} from 'angular2/http';
let adapter = new UpgradeAdapter();
adapter.addProvider(Http);
adapter.upgradeNg1Provider('dataService');
adapter.bootstrap(document.body, ['myApp']);
EDIT 2:
करने के लिए कोईhttp
इंजेक्शन -
MyService = __decorate([
core_1.Injectable(),
__param(0, core_1.Inject('dataService'))
], MyService);
return MyService;
आप देख सकते हैं:
जब मेरे ES5 को देखकर मैं इस कोड पाया कोड मालूम। समस्या के लिए
Error: No provider for Http!
समाधान:: जब इस वाक्य विन्यास का उपयोग करने के लिए अपने सेवा निर्माता बदलते
constructor(@Inject('dataService') dataService, @Inject('Http') http)
अब मैं निम्न त्रुटि हो रही है
तो मैं अंत में सफल होते हैं तो एक सुराग का उपयोग कर @PierreDuc प्रतिक्रिया से:
मैंने MyService के लिए निर्माता को बदल दिया:
constructor(@Inject('dataService') dataService, @Inject(Http) http)
और मैं अपने घटक के लिए एक प्रदाता (जो सेवा का उपयोग करता) के रूप में HTTP_PROVIDERS
कहा: (मेरी एनजी 2 घटक :)
providers: [MyService, HTTP_PROVIDERS]
@Injectable
या addProvider
मेरी बूटस्ट्रैप के अंदर के लिए कोई ज़रूरत नहीं के अंदर ।
मुझे पूरी तरह से समझ में नहीं आ रहा है कि यह क्यों हो रहा है और यह समाधान क्यों काम करता है। अगर कोई इसे यहां जानता है तो इसे समझाएगा।
समाधान संपादित करें:
एक छोटे से पढ़ने के बाद, मैं अब डि बेहतर समझते हैं।मैं प्रत्येक घटक के लिए प्रदाता को परिभाषित करने के बजाय addProvider(HTTP_PROVIDERS)
का उपयोग कर सकता हूं (यह सभी घटकों के लिए उपलब्ध होगा)। एकमात्र रहस्य छोड़ दिया गया है क्यों private http: Http
इंजेक्शन क्यों काम नहीं करता है जबकि @Inject(Http) http
काम करता है। कोई उपाय???
के लिए यह प्रयास _So मैं अंत में सफल होते हैं तो @PierreDuc response_ से एक सुराग का उपयोग कर, तो आप शायद उन्हें कुछ श्रेय उस मामले में देना चाहिए :) – christiandev
मैंने किया था! लेकिन यह इस मुद्दे का समाधान नहीं है, इसलिए मैं इसे उत्तर के रूप में चिह्नित नहीं कर सकता क्योंकि यह जवाब नहीं था ... –
मुझे पार्टी के लिए देर हो चुकी है, लेकिन अन्य भविष्य के पाठकों के लिए ... "यह एक" सर्वश्रेष्ठ है अभ्यास "@ इंजेक्शन योग्य() सजावट [अपनी सभी सेवाओं के लिए] दोनों को स्थिरता और भावी-प्रमाणन के लिए शुरूआत से लागू करने के लिए" - [सेवा ट्यूटोरियल] (https://angular.io/docs/ts/ नवीनतम/ट्यूटोरियल/तो-pt4.html)। –