23

मैं एक सेवा में http प्रदाता आयात करने की कोशिश की, लेकिन मैं निम्नलिखित त्रुटि हो रही है:कोणीय 2 HTTP "के लिए सभी मापदंडों को हल नहीं किया जा सकता 'AppService'"

Cannot resolve all parameters for 'AppService'(?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'AppService' is decorated with Injectable.

यहाँ कुछ कोड के टुकड़े कर रहे हैं:

<script src="~/es6-shim/es6-shim.min.js"></script> 
<script src="~/systemjs/dist/system-polyfills.js"></script> 

<script src="~/angular2/bundles/angular2-polyfills.js"></script> 
<script src="~/systemjs/dist/system.src.js"></script> 
<script src="~/rxjs/bundles/Rx.js"></script> 
<script src="~/angular2/bundles/angular2.dev.js"></script> 
<script src="~/angular2/bundles/http.dev.js"></script> 

<!-- 2. Configure SystemJS --> 
<script> 
    System.config({ 
     map: { 'rxjs': 'RCO/rxjs' }, 
     packages: { 
      RCO: { 
       format: 'register', 
       defaultExtension: 'js' 
      }, 
      'rxjs': {defaultExtension: 'js'} 
     } 
    }); 
    System.import('RCO/Areas/ViewOrganization/AngularTemplates/boot') 
     .then(null, console.error.bind(console)); 

boot.ts

import {bootstrap} from 'angular2/platform/browser' 
import {HTTP_PROVIDERS} from 'angular2/http' 
import 'rxjs/add/operator/map' 
import {AppComponent} from 'RCO/Areas/ViewOrganization/AngularTemplates/app.component' 
import {AppService} from 'RCO/Areas/ViewOrganization/AngularTemplates/app.service' 

bootstrap(AppComponent, [HTTP_PROVIDERS, AppService]); 

app.service.ts

import {Injectable} from 'angular2/core'; 
import {Http, Response} from 'angular2/http'; 
import {Observable} from 'rxjs/Rx'; 

@Injectable() 
export class AppService { 

    constructor(private http: Http) { } 

    // Uses http.get() to load a single JSON file 
    getTableData() { 
     return this.http.get('...').map((res: Response) => res.json()); 
    } 

} 

मैं सर्वर पर एक नियंत्रक को अंततः डेटा तालिका में एक JSON फ़ाइल लोड करने की कोशिश कर रहा हूं। बहुत सीधी चीजें, लेकिन जिस तरह से मैं एचटीपी मॉड्यूल लोड कर रहा हूं वह गलत लगता है। किसी भी प्रकार के मदद की बहुत सराहना की जाएगी।

+0

क्या आप टाइपस्क्रिप्ट कंपाइलर का उपयोग कर रहे हैं? यदि नहीं तो यह मामला होगा http://stackoverflow.com/a/35350172/2435473 –

+0

यह तय किया गया ... धन्यवाद – ddpdoj

+1

यह इस तरह काम करना चाहिए। लेकिन यदि आप टाइपस्क्रिप्ट का उपयोग नहीं करते हैं, लेकिन केवल ES6 (विधि पैरामीटर के लिए कोई प्रकार का समर्थन नहीं), तो आपको इंजेक्शन 2 के बारे में Angular2 को अतिरिक्त मेटाडेटा निर्दिष्ट करने की आवश्यकता है। इस मामले में, @ पंकज का वर्णन करता है कि यह कैसे करना है ;-) –

उत्तर

49

लगता है जैसे आप js करने के लिए फ़ाइलों transpiling के लिए typescript संकलक का उपयोग नहीं कर रहे हैं, उस स्थिति में आप जबकि एक घटक निर्माता के अंदर किसी भी निर्भरता इंजेक्शन लगाने के उपयोग @Inject की आवश्यकता है।

import {Injectable, Inject} from 'angular2/core'; 
import {Http, Response} from 'angular2/http'; 
import {Observable} from 'rxjs/Rx'; 

@Injectable() 
export class AppService { 
    constructor(@Inject(Http) private http: Http) { } 
    // Uses http.get() to load a single JSON file 
    getTableData() { 
     return this.http.get('...').map((res: Response) => res.json()); 
    } 
} 
+1

यह मेरे घंटों का समय बचाता है। धन्यवाद। –

+0

यह काम किया! क्या आप मुझे बता सकते हैं कि "पारदर्शी" और टिप्पणियों में व्याख्या करने के बजाए – dsk

+1

@ धनंजयके करने के लिए टाइपस्क्रिप्ट कंपाइलर का उपयोग कैसे करें, मैं अत्यधिक [इस आलेख] (https://scotch.io/tutorials/) के माध्यम से जाने की अनुशंसा करता हूं। जावास्क्रिप्ट-ट्रांसपेलर-वे-वे-क्यों-क्यों-हमें-ज़रूरत है) –

23

जो भविष्य में कुछ टाइपिंग की बचत होती है किया जाएगा यह करने के लिए एक और तरीका है,:

में

अपने tsconfig.json जोड़ने compilerOptions.emitDecoratorMetadata=true

सरल tsconfig.json का उदाहरण होगा:

{ 
    "compilerOptions": { 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true 
    } 
} 
+4

यह मेरा दिन बचाया! –

0

मेरे पास एक ही समस्या थी, और मेरे लिए समस्या यह थी कि import { HttpModule } from '@angular/http'में मुझे याद आ रही थी 0

संबंधित मुद्दे