Após minha 192ª edição, notei que no meu código estava importando de operator/- rxjs/add/operator/of- em vez de observable/. D'oh.
EricRobertBrewer
Descobri que não preciso usar essa declaração em um dos projetos angulares. Mas no outro, tenho que importá-lo. Eu não entendo as diferenças. Você conhece os motivos?
Niaomingjian 14/09/19
1
Versão angular, talvez ?! Não precisei fazer isso para 4.3.2, mas fiz para 5.0.0.
Draghon
@Draghon: Exatamente o mesmo comigo. Eu não precisava fazer isso para o 4.4, agora faço para o 5.2. Ainda mais estranho, eu só tenho que incluí-lo em um arquivo e todos os outros arquivos .ts simplesmente pegam e estão prontos.
JP ten Berge
2
E se eu conseguir Não encontrar o módulo "rxjs / add / observable / of"?
Obrigado! Descobrir as importações no Rx é sempre uma fonte de frustração tão grande para mim por causa da volatilidade da API.
DomenicDatti
43
Embora pareça absolutamente estranho, comigo importava capitalizar o 'O' no caminho de importação de import {Observable} from 'rxjs/Observable. A mensagem de erro observable_1.Observable.of is not a functionpermanece presente se eu importar o Observable de rxjs/observable. Estranho, mas espero que ajude os outros.
Isso ocorre devido a alterações na versão do RxJS de 5 para 6, que introduziram muitas alterações recentes. Você pode conferir como migrar seu projeto Angular aqui: rxjs.dev/guide/v6/migration
Edric
29
Meu erro bobo foi que eu esqueci de acrescentar /addao exigir o observável.
Foi:
import { Observable } from 'rxjs/Observable';
import 'rxjs/observable/of';
Que visualmente parece OK, porque o rxjs/observable/ofarquivo existe.
Deveria estar:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
Esta não é uma solução alternativa, é a sintaxe do Angular> = 6.0.0. importar {de} de 'rxjs' foi bom para mim. Veja stackoverflow.com/questions/38067580/…
mark_h
18
Só para adicionar,
se você estiver usando muitos deles, poderá importar todos os
import 'rxjs/Rx';
como mencionado por @Thierry Templier. Mas acho que se você estiver usando um operador limitado, deverá importar um operador individual como
Descobri que não preciso usar essa declaração em um dos projetos angulares. Mas no outro, tenho que importá-lo. Eu não entendo as diferenças. Você conhece os motivos?
Niaomingjian 14/09/19
16
Você também pode importar todos os operadores desta maneira:
Eu não recomendaria a importação dessa maneira, pois essa é uma biblioteca bastante grande e "of" é uma parte muito pequena dela.
methgaard
2
@methgaard import { Observable } from 'rxjs/Observable' import 'rxjs/add/observable/of';não funciona. Só import {Observable} from 'rxjs/Rx';funciona. A versão é 5.4.2
niaomingjian
@methgaard Me desculpe. Eu cometi um erro. O fato é que eu entendi Observable_1.Observable.of(...).delay(...).timeout is not a function. Eu não useiimport 'rxjs/add/operator/timeout'
Esta é uma resposta apenas de código. Você poderia explicar o que está tentando sugerir?
Peter Wippermann
1
Olá, devemos importar apenas o operador de que precisamos, não todo o "Observável" devido a um problema de desempenho. Na nova versão (^ 5.5.10), o caminho certo para importar o operador "of" é: import {of} de 'rxjs / observable / of' ... Funciona no meu caso. Vou editar minha resolução. Obrigado Peter.
Letanthang
4
Atualizou de Angular 5 / Rxjs 5 para Angular 6 / Rxjs 6?
Usando o 6.0, a tentativa de se inscrever no Observable.create (of (val)) resultou em "this._subscribe não é uma função". Em vez disso, criei um observável com sucesso apenas chamando "of (val)".
Jim Norman
3
RxJS 6
Ao atualizar para a versão 6 da RxJSbiblioteca e não usar o rxjs-compatpacote, o código a seguir
import { Observable } from 'rxjs/Observable';Deveria trabalhar. O pacote observador também deve corresponder à importação import { Observer } from 'rxjs/Observer';se você estiver usando observadores
import {<something>} from 'rxjs'; faz uma importação enorme, por isso é melhor evitá-la.
import { of } from 'rxjs'; return of(res);
corretos github.com/ReactiveX/rxjs/blob/master/MIGRATION.md#import-paths & github.com/ReactiveX/rxjs/blob/master/…Respostas:
Na verdade eu tenho importações desarrumadas. Na versão mais recente do RxJS, podemos importá-lo assim:
fonte
operator/
-rxjs/add/operator/of
- em vez deobservable/
. D'oh.Se alguém tiver esse problema ao usar o Angular 6 / rxjs 6, veja as respostas aqui: Não foi possível usar o Observable.of nos RxJs 6 e Angular 6
Em suma, você precisa importá-lo assim:
E então, em vez de ligar
Apenas use
fonte
Embora pareça absolutamente estranho, comigo importava capitalizar o 'O' no caminho de importação de
import {Observable} from 'rxjs/Observable
. A mensagem de erroobservable_1.Observable.of is not a function
permanece presente se eu importar o Observable derxjs/observable
. Estranho, mas espero que ajude os outros.fonte
Se você estiver usando Angular 6/7
E então, em vez de ligar
Apenas use
fonte
Meu erro bobo foi que eu esqueci de acrescentar
/add
ao exigir o observável.Foi:
Que visualmente parece OK, porque o
rxjs/observable/of
arquivo existe.Deveria estar:
fonte
O patch não estava funcionando para mim, por qualquer motivo, então tive que recorrer a este método:
fonte
Só para adicionar,
se você estiver usando muitos deles, poderá importar todos os
como mencionado por @Thierry Templier. Mas acho que se você estiver usando um operador limitado, deverá importar um operador individual como
como mencionado por @uksz.
Porque 'rxjs / Rx' importará todos os componentes do Rx que definitivamente custam desempenho.
fonte
Você também pode importar todos os operadores desta maneira:
fonte
import { Observable } from 'rxjs/Observable' import 'rxjs/add/observable/of';
não funciona. Sóimport {Observable} from 'rxjs/Rx';
funciona. A versão é 5.4.2Observable_1.Observable.of(...).delay(...).timeout is not a function
. Eu não useiimport 'rxjs/add/operator/timeout'
Estou usando Angular 5.2 e RxJS 5.5.6
Este código não funcionou:
Abaixo o código funcionou:
Método de chamada:
Eu acho que eles podem ter mudado / alterado a funcionalidade () no RxJS 5.5.2
fonte
Isso deve funcionar corretamente, apenas tente.
fonte
fonte
Atualizou de Angular 5 / Rxjs 5 para Angular 6 / Rxjs 6?
Você deve alterar suas importações e sua instanciação. Confira o post de Damien
Tl; dr:
fonte
RxJS 6
Ao atualizar para a versão 6 da
RxJS
biblioteca e não usar orxjs-compat
pacote, o código a seguirtem que ser transformado em
fonte
Eu tive esse problema hoje. Estou usando o systemjs para carregar as dependências.
Eu estava carregando os Rxjs assim:
Em vez de usar caminhos, use o seguinte:
Essa pequena alteração na maneira como o systemjs carrega a biblioteca corrigiu meu problema.
fonte
Para Angular 5+:
import { Observable } from 'rxjs/Observable';
Deveria trabalhar. O pacote observador também deve corresponder à importaçãoimport { Observer } from 'rxjs/Observer';
se você estiver usando observadoresimport {<something>} from 'rxjs';
faz uma importação enorme, por isso é melhor evitá-la.fonte
Para mim (Angular 5 e RxJS 5), a importação do preenchimento automático sugeriu:
enquanto a deve ser (com todos os operadores estáticos
from
,of
, ect funcionando bem:fonte
mostra um requisito de rxjs-compat
Eu não tinha isso instalado. Instalado por
e executar novamente corrigiu meu problema.
fonte
Na
rxjs
v6, oof
operador deve ser importado comoimport { of } from 'rxjs';
fonte
De alguma forma, até o Webstorm fez assim
import {of} from 'rxjs/observable/of';
e tudo começou a funcionarfonte