2016-01-03 8 views
11

मैं एक tutorial में इस उदाहरण कोड पाया याद आ रही है:Angular2 http .map समारोह

getRandomQuote() { 
    this.http.get('http://localhost:3001/api/random-quote') 
    .map(res => res.text()) 
    .subscribe(
     data => this.randomQuote = data, 
     err => this.logError(err), 
    () => console.log('Random Quote Complete') 
    ); 
} 

लेकिन जब इसका इस्तेमाल करने की कोशिश कर रहा, मैं केवल TypeError: this.http.get(...).map is not a function in [null] मिलती है:

getChannels():Promise<Channel> { 
    return this.http.get('...') 
     .map(function (response:Response) { 
      ... 
     }).toPromise(); 
} 

मेरे टाइपप्रति संकलक मुझसे कहता है कि वे विधियां उपलब्ध हैं लेकिन http.get() के वापसी मूल्य का निरीक्षण करते समय वे गायब हैं।

मैं वर्तमान angualar2 शुरुआती गाइड के package.json प्रयोग किया है:

"dependencies": { 
    "angular2": "2.0.0-beta.0", 
    "systemjs": "0.19.6", 
    "es6-promise": "^3.0.2", 
    "es6-shim": "^0.33.3", 
    "reflect-metadata": "0.1.2", 
    "rxjs": "5.0.0-beta.0", 
    "zone.js": "0.5.10" 
}, 

...

<script src="node_modules/angular2/bundles/angular2.dev.js"></script> 
<script src="node_modules/angular2/bundles/http.dev.js"></script> 
कोई भी विचार मैं इस बिंदु पर गलत क्या मिल सकता है

?

+2

शायद http://stackoverflow.com/questions/34394708/in-angular-2-0-0 -बेटा -0-मैप-एंड-फ़िल्टर-गायब-से-फॉर्म-इनपुट-ऑब्जेर या http://stackoverflow.com/questions/34394708/in-angular-2-0-0-beta-0 -map और फिल्टर-रहे-लापता-से-एक फार्म आदानों-obser/34396552? –

+2

इसे हजारों बार उत्तर दिया गया है, इसे केवल एक खोज की आवश्यकता है। –

उत्तर

9

आप चाहते हैं अपने index.html इस तरह कुछ देखने के लिए, इसलिए system.js उन सभी आरएक्सजे निर्भरताओं को ढूंढ सकता है जिन्हें आप अपने घटकों में आयात करते हैं।

 <script src="/lib/anguar2/angular2-polyfills.js"></script> 
 
     <script src="/lib/es6-shim/es6-shim.js"></script> 
 
     <script src="/lib/systemjs/system.src.js"></script> 
 

 
     <script> 
 
      System.config({ 
 
       defaultJSExtensions: true, 
 
       packages: { 
 
        app: { 
 
         format: 'register' 
 
        } 
 
       }, 
 
       map: { 
 
        'rxjs':"lib/rxjs" 
 

 
       } 
 
      }); 
 
     </script> 
 
     <script src="/lib/anguar2/angular2.dev.js"></script> 
 
     <script src="/lib/anguar2/router.dev.js"></script> 
 
     <script src="/lib/anguar2/http.js"></script> 
 
     <script> 
 
      System.import('app/boot'); 
 
     </script>
यकीन है कि "lib/rxjs" फ़ोल्डर node_modules से सभी फ़ाइलों है/फ़ोल्डर rxjs करें। उन सभी को लोड नहीं किया जाएगा, केवल वही जिन्हें आप चाहते हैं और उनकी निर्भरताएं (system.js इसे आपके लिए समझ लेंगे)।

अब आप अपने boot.ts फ़ाइल में इस का उपयोग कर सकते हैं:

import 'rxjs/add/operator/map';

31

Observable डिफ़ॉल्ट रूप से केवल कुछ ऑपरेटरों के साथ आता है। या, यदि आप इसके बारे में नहीं लगता है कि चाहते हैं, बस (, अपने बूटस्ट्रैप फ़ाइल में उदाहरण के लिए) सब कुछ लोड

import 'rxjs/add/operator/map'; 

:: आप स्पष्ट रूप से उन्हें आयात करने के लिए है

import 'rxjs/Rx'; 
+0

यह स्वीकार्य उत्तर होना चाहिए। छोटा, आसान करने के लिए आसान, और काम करता है। – Rap

+0

मुझे नहीं पता कि मुझे क्यों 'आयात * को आरएक्सजे' से आरएक्स के रूप में जोड़ने की जरूरत है; 'और ' Rx.Observable.of (0); 'पर्यवेक्षण समर्थन मानचित्र फ़ंक्शन बनाने के लिए – tom10271