У меня есть служба, в которой есть этот метод:
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());
}
}
}
в конструкторе компонента я подписываюсь так:
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)
);
}
}
Это работает, если объект поступает с сервера, но я пытаюсь создать наблюдаемый объект, который будет работать с данным subscribe()
вызовом для статической строки (это происходит, когда testModelService.fetchModel()
не получает uuid), поэтому в обоих случаях обработка выполняется без проблем.
typescript
promise
angular
observable
rxjs
Михаил Михайлидис
источник
источник
import { of } from 'rxjs';
использоватьof
и вместоObservable.of
..map()
результата get, поэтому вам нужно это сделать.pipe(map((res:any) => res.json()))
. Смотрите здесь: stackoverflow.com/a/35220045/986160Начиная с июля 2018 года и с момента выпуска
RxJS 6
, новый способ получить Observable из значения - это импортироватьof
оператор следующим образом:import { of } from 'rxjs';
а затем создайте наблюдаемый из значения, например:
of(someValue);
Обратите внимание, что раньше вам приходилось делать то же, что
Observable.of(someValue)
и в принятом в настоящее время ответе. Существует хорошая статья на другой RxJS 6 изменений здесь .источник
Кажется, что все изменилось с Angular 2.0.0
.next()
Функция будет вызываться на вашем абонента.источник
of
функцию rxjs, напримерimport 'rxjs/add/observable/of'
Вот как вы можете создать простую наблюдаемую для статических данных.
Надеюсь, этот ответ будет вам полезен. Мы можем использовать HTTP-вызов вместо статических данных.
источник
Таким образом, вы можете создать Observable из данных, в моем случае мне нужно поддерживать корзину покупок:
service.ts
Component.ts
источник