2016-03-28 25 views
7

हैलो,नमूदार त्रुटियों और RxJs 5 beta.3

मैं VS2015 में चल Angular2 बीटा 12 उपयोग कर रहा हूँ। जब मैं 5.0.0-beta.2 से beta.3 तक rxjs को अद्यतन करता हूं तो मुझे आम तौर पर अपने वादों से संबंधित अपवादों की एक श्रृंखला का सामना करना पड़ता है।

उदा।

  1. संपत्ति map प्रकार Observable<Response> पर
  2. संपत्ति share मौजूद नहीं है प्रकार में मौजूद नहीं है Observable<Response>
  3. परिवेश मॉड्यूल घोषणा रिश्तेदार मॉड्यूल का नाम
  4. परिवेश मॉड्यूल अन्य मॉड्यूल या नामस्थान में नेस्ट नहीं किया जा सकता निर्दिष्ट नहीं कर सकते।

Package.json

{ 
    "name": "ASP.NET", 
    "version": "0.0.0", 
    "scripts": { 
    "tsc": "tsc", 
    "tsc:w": "tsc -w", 
    "lite": "lite-server", 
    "start": "concurrent \"npm run tsc:w\" \"npm run lite\" " 
    }, 
    "dependencies": { 
    "angular2": "2.0.0-beta.12", 
    "systemjs": "0.19.24", 
    "es6-promise": "3.1.2", 
    "es6-shim": "0.35.0", 
    "reflect-metadata": "0.1.3", 
    "rxjs": "5.0.0-beta.3", // beta.2 allowed project to build 
    "zone.js":"0.6.6" 
    }, 
    "devDependencies": { 
    "gulp": "3.9.1", 
    "gulp-concat": "2.6.0", 
    "gulp-cssmin": "0.1.7", 
    "gulp-uglify": "1.5.3", 
    "rimraf": "2.2.8", 
    "concurrently": "2.0.0", 
    "lite-server": "2.1.0", 
    "typescript": "1.8.9" 
    } 
} 

जारी करना इस कोड में समारोह के नक्शे से संबंधित है:

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

import {ApplicationVM} from '../../Applications/ViewModels/Application.ViewModel'; 

@Injectable() 
export class ApplicationService { 
    constructor(private http: Http) { } 

    private _serviceUrl = './../api/'; 

    getApplications() { 
     return this.http.get(this._serviceUrl + "applications/active") 
      .map(res => <ApplicationVM[]>res.json()) 
      // .map((res: Response) => res.json()) 
      .do(data => console.log(data)) // eyeball results in the console 
      .catch(this.handleError); 
    } 

    private handleError(error: Response) { 
     console.log(error); 
     return Observable.throw(error.json().error || 'Server error'); 
    } 

} 

एक और में, समस्या share()

constructor(private _http: Http) { 
    console.log("constructor"); 
    this.menulist$ = new Observable(observer => this._menulistObserver = observer).share(); 
    this.menuState$ = new Observable(observer => this._menuStateObserver = observer).share(); 
    this.menuWidth$ = new Observable(observer => this._menuWidthObserver = observer).share();} 

साथ है मैं इस लग रहा है महत्वपूर्ण हो सकता है - rxjs फ़ाइलों की एक श्रृंखला unde है सापेक्ष संदर्भ के लिए लाल rlined ../../Observable (उदाहरण के नीचे interval.d.ts में है)

import { IntervalObservable } from '../../observable/IntervalObservable'; 
declare module '../../Observable' { 
    namespace Observable { 
     let interval: typeof IntervalObservable.create; 
    } 
} 

मेरे boot.ts

///<reference path="./../node_modules/angular2/typings/browser.d.ts"/> 
import {bootstrap}  from 'angular2/platform/browser'; 
import {ROUTER_PROVIDERS} from 'angular2/router'; 
import {AppComponent} from './app.component'; 
import {HTTP_PROVIDERS} from 'angular2/http'; 
import 'rxjs/Rx'; // kitchen sink 

// Bootstrap the application and reference the required directives 
bootstrap(AppComponent, [ROUTER_PROVIDERS, HTTP_PROVIDERS]); 

मेरे html पृष्ठ

<!-- 1. Load libraries --> 
    <script src="~/nodelibs/angular2/bundles/angular2-polyfills.js"></script> 
    <script src="~/nodelibs/systemjs/system.src.js"></script> 
    <script src="~/nodelibs/typescript/lib/typescript.js"></script> 
    <script src="~/nodelibs/rxjs/bundles/Rx.js"></script> 
    <script src="~/nodelibs/angular2/bundles/angular2.dev.js"></script> 

    <script src="~/nodelibs/angular2/bundles/router.dev.js"></script> 
    <script src="~/nodelibs/angular2/bundles/http.dev.js"></script> 


    <!-- 2. Configure SystemJS --> 
    <script> 

    var rootPath = "@Url.Content("~/")"; 

    System.config({ 
     //transpiler: 'typescript', 
     //typescriptOptions: { emitDecoratorMetadata: true }, 
     baseURL: rootPath, 
     defaultJSExtensions: true, 
     packages: { 
      app: { 
       //format: 'register', 
       defaultExtension: 'js' 
      }, map: { 

       'rxjs/observable/*' : 'nodelibs/rxjs/observable/*.js', 
       'rxjs/operators/*' : 'nodelibs/rxjs/operators/*.js', 
       'rxjs/*' : 'nodelibs/rxjs/*.js' 
      } 
     } 
    }); 
    System.import("/app/boot.js") 
      .then(null, console.error.bind(console)); 

    </script> 

मैं स्टंप्डया हूँ और कुछ सहायता की सराहना की जाएगी।

धन्यवाद, दान।

उत्तर

6

एंगुलर के पैकेज के अनुसार। जेसन आपको बिल्कुल आरएक्सजेएस 5.0.0-बीटा का उपयोग करना चाहिए।2 https://github.com/angular/angular/blob/master/package.json#L37

+0

बढ़िया! मैं सोच रहा था कि मुझे यह जानकारी कहां मिलेगी कि मुझे किस पैकेज का उपयोग करना चाहिए *। बहुत बहुत धन्यवाद। – DanAbdn

+1

मेरी टीम में हम एक ही समस्या का सामना कर रहे हैं और केवल विजुअल स्टूडियो इंटेलिजेंस के लिए (वेबपैक टाइपस्क्रिप्ट संकलन ठीक है)। जबकि मुझे पता है कि वर्तमान कोणीय संस्करण को आरएक्सजेएस 5 बीटा 2 की आवश्यकता है, क्या आप जानते हैं कि उन दो चीजें कैसे संबंधित हैं? अर्थात। यह ठीक क्यों बनाता है, लेकिन वीएस शिकायत करता है? हमें nxx-store – superjos

+0

बीटा 6 की वजह से उस आरएक्सजेएस संस्करण की आवश्यकता है, अब मुझे विश्वास है कि – crh225

15

ऑपरेटरों के संबंध में, आपको उन्हें मैन्युअल रूप से आयात करने की आवश्यकता है क्योंकि वे डिफ़ॉल्ट रूप से वेधशाला वर्ग में शामिल नहीं हैं।

इसके लिए आप कर सकते हैं या तो:

import {Observable} from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/share'; 

या (सभी ऑपरेटरों शामिल करने के लिए): अन्यथा

import {Observable} from 'rxjs/Rx'; 

सामान्य रूप से आप नक्शे में अपने SystemJS विन्यास में rxjs परिभाषित करने की जरूरत नहीं है ब्लॉक। एक स्क्रिप्ट टैग में संबंधित बंडल फ़ाइल सहित पर्याप्त है।

+2

मुझे पहले से ही 'रसोई सिंक' यानी आरएक्सजेएस/आरएक्स शामिल है जैसा कि मूल प्रश्न में उल्लेख किया गया है। लेकिन कोणीय परियोजनाओं को अनुकूलित करने के लिए एक बहुत उपयोगी युक्ति है। धन्यवाद। – DanAbdn

+0

मेरे लिए इसे फिक्स्ड! यह ध्यान देने योग्य है कि पहला विकल्प (केवल ऑपरेटरों को मैन्युअल रूप से आयात करना), जहां तक ​​मैं समझता हूं, एक और अधिक प्रदर्शन विकल्प, क्योंकि उन आयातों का उपयोग केवल टाइपस्क्रिप्ट संकलन के लिए किया जाएगा। इस प्रकार, इसका परिणाम आपके कोडबेस में अधिक कोड नहीं जोड़ा जाएगा, यदि आप दूसरे विकल्प का उपयोग करते हैं तो यह मामला होगा। – jessepinho

5

VS2015 के लिए इस समस्या को अब के लिए GitHub here

काम arounds के रूप में सूचीबद्ध के लिए एक समाधान नहीं है, तो आप सी जगह ले सकता है: \ Program Files (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 14.0 \ Common7 \ IDE https://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518/lib/typescriptServices.js में फ़ाइल के साथ \ CommonExtensions \ Microsoft \ TypeScript \ typecriptServices.js। पहले स्थानीय बैकअप लें।

महत्वपूर्ण: सुनिश्चित करें कि आप VS2015 अद्यतन पर हैं और टाइपप्रति> 1.8.2 स्थापित

है रहो

(मेरे वी.एस. अद्यतन 1 पर फ़ाइल बदलने के बाद शुरू नहीं होगी)

मैं rxjs 5.0.0-beta का उपयोग कर रहा हूँ। बीटीडब्ल्यू।

+0

हाँ आप अंगुलर आरसी 1 के साथ पूरी तरह से सही हैं, यह समाधान काम करता है ... मेरा मूल प्रश्न कोणीय बीटा के लिए था जहां संस्करण आरएक्सजे बीटा 2 का उपयोग किया जाना था। एंगुलर आरसी के साथ आरएक्सजेएस बीटा 6 के लिए यह गायब टाइपस्क्रिप्ट कार्यक्षमता के साथ कुछ करना है जो कई बिल्ड त्रुटियों का कारण बनता है। दूसरों के देखने के लिए आपकी प्रतिक्रिया बहुत बढ़िया है। – DanAbdn

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