Vraag Ontbrekende waarneembare methoden RxJS 5.0.0-beta.0


Ik heb een probleem bij het gebruik van RxJS met Angular 2. De meeste methoden die worden voorgesteld vanuit het definitiebestand van het Typecript zijn niet gedefinieerd voor mijn waarneembare object zoals ...

enter image description here

enter image description here

toen kwam ik tot de conclusie dat er geen methoden bestaan ​​voor het waarneembare prototype.

enter image description here

Ik weet dat veel dingen zijn veranderd van versie 4 naar 5, dus mis ik iets? 

Browserify heeft het voor mij toegevoegd ... enter image description here


12
2017-12-31 16:16


oorsprong


antwoorden:


Zonder uw echte code te zien, kan ik u niet precies vertellen wat ik moet toevoegen om het te repareren.

Maar het algemene probleem is dit: RxJS 5 wordt niet langer opgenomen met Angular 2 nu het de Beta-fase is binnengegaan. U moet de gewenste operator (s) importeren of ze allemaal importeren. De importstatements zien er als volgt uit:

import 'rxjs/add/operator/map'; // imports just map
import 'rxjs/add/operator/mergeMap'; // just mergeMap
import 'rxjs/add/operator/switchMap'; // just switchMap
import {delay} from 'rxjs/operator/delay'; // just delay

of zoiets

import 'rxjs/Rx'; // import everything

Raadpleeg de. Om het pad naar de gewenste module te bepalen bronboom. Elke import met add voegt eigenschappen toe aan Observable of Observable.prototype. Zonder add, je zou het moeten doen import {foo} from 'rxjs/path/to/foo'.

U moet er ook voor zorgen dat RxJS correct in het project wordt gebracht. Zoiets zou in uw index.html-bestand terechtkomen:

System.config({
    map: {
        'rxjs': 'node_modules/rxjs' // this tells the app where to find the above import statement code
    },
    packages: {
        'app': {defaultExtension: 'js'}, // if your app in the `app` folder
        'rxjs': {defaultExtension: 'js'}
    }
});
System.import('app/app'); // main file is `app/app.ts` 

Als je gebruikt Webpack om de Angular 2-app te bouwen zoals in dit Github-project (zoals ik deed), dan heb je dat niet nodig System dingen en de invoer zou het moeten doen.


18
2017-12-31 16:29



Ja, in Angular 2.0 moet je de operatoren / observabelen opnemen die je nodig hebt.

Ik doe het als volgt:

import 'rxjs/operator/map';
import 'rxjs/operator/delay';
import 'rxjs/operator/mergeMap';
import 'rxjs/operator/switchMap';
import 'rxjs/observable/interval';
import 'rxjs/observable/forkJoin';
import 'rxjs/observable/fromEvent';

U moet dit echter ook configureren in System.js

System.config({
            defaultJSExtensions: true,
            paths: {
                'rxjs/observable/*' : './node_modules/rxjs/add/observable/*.js',
                'rxjs/operator/*' : './node_modules/rxjs/add/operator/*.js',
                'rxjs/*' : './node_modules/rxjs/*.js'
            }
        });

Hier is werkende code: https://github.com/thelgevold/angular-2-samples


9
2017-12-31 16:25



Ik heb een JSPM-setup in mijn project, dus het toevoegen van rxjs aan het padgedeelte was niet genoeg.

jspm heeft het volgende toegevoegd aan mijn SystemJS-configuratie (kaartsectie):

"npm:angular2@2.0.0-beta.6": {
  "crypto": "github:jspm/nodelibs-crypto@0.1.0",
  "es6-promise": "npm:es6-promise@3.1.2",
  "es6-shim": "npm:es6-shim@0.33.13",
  "process": "github:jspm/nodelibs-process@0.1.2",
  "reflect-metadata": "npm:reflect-metadata@0.1.2",
  "rxjs": "npm:rxjs@5.0.0-beta.0",
  "zone.js": "npm:zone.js@0.5.14"
},

Dus als je jspm gebruikt, zorg er dan voor dat je bovenstaande rxjs-toewijzing verwijdert, anders worden sommige rxjs-bestanden twee keer geladen, één keer via jspm_packages en één keer via node_modules.


1
2018-02-27 02:57