Estou tendo um serviço que tem este método:
export class TestModelService {
public testModel: TestModel;
constructor( @Inject(Http) public http: Http) {
}
public fetchModel(uuid: string = undefined): Observable<string> {
if(!uuid) {
//return Observable of JSON.stringify(new TestModel());
}
else {
return this.http.get("http://localhost:8080/myapp/api/model/" + uuid)
.map(res => res.text());
}
}
}
no construtor do componente, estou me inscrevendo assim:
export class MyComponent {
testModel: TestModel;
testModelService: TestModelService;
constructor(@Inject(TestModelService) testModelService) {
this.testModelService = testModelService;
testService.fetchModel("29f4fddc-155a-4f26-9db6-5a431ecd5d44").subscribe(
data => { this.testModel = FactModel.fromJson(JSON.parse(data)); },
err => console.log(err)
);
}
}
Isso funciona se um objeto vem do servidor, mas estou tentando criar um observável que funcione com a subscribe()
chamada fornecida para uma string estática (isso acontece quando testModelService.fetchModel()
não recebe um uuid), portanto, há um tratamento perfeito em ambos os casos.
typescript
promise
angular
observable
rxjs
Michail Michailidis
fonte
fonte
import { of } from 'rxjs';
e usarof
, em vez deObservable.of
..map()
resultado de get, então você precisa fazer.pipe(map((res:any) => res.json()))
. Veja aqui: stackoverflow.com/a/35220045/986160A partir de julho de 2018 e do lançamento de
RxJS 6
, a nova maneira de obter um Observable de um valor é importar oof
operador da seguinte maneira:import { of } from 'rxjs';
e crie o observável a partir do valor, assim:
of(someValue);
Observe que você costumava fazer
Observable.of(someValue)
like na resposta aceita atualmente. Há um bom artigo sobre as outras alterações do RxJS 6 aqui .fonte
As coisas parecem ter mudado desde Angular 2.0.0
A
.next()
função será chamada em seu assinante.fonte
of
função de rxjs, comoimport 'rxjs/add/observable/of'
É assim que você pode criar um observável simples para dados estáticos.
Espero que esta resposta seja útil. Podemos usar uma chamada HTTP em vez de dados estáticos.
fonte
Desta forma, você pode criar observáveis a partir de dados, no meu caso, preciso manter o carrinho de compras:
service.ts
Component.ts
fonte