Mam usługę, która ma tę metodę:
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());
}
}
}
w konstruktorze komponentu subskrybuję w ten sposób:
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)
);
}
}
Działa to, jeśli obiekt pochodzi z serwera, ale próbuję utworzyć obserwowalny, który będzie działał z podanym subscribe()
wywołaniem statycznego ciągu (dzieje się tak, gdy testModelService.fetchModel()
nie otrzymuje uuid), więc w obu przypadkach jest bezproblemowa obsługa.
typescript
promise
angular
observable
rxjs
Michail Michailidis
źródło
źródło
import { of } from 'rxjs';
i używaćof
zamiastObservable.of
..map()
wyniku get, więc musisz to zrobić.pipe(map((res:any) => res.json()))
. Zobacz tutaj: stackoverflow.com/a/35220045/986160Od lipca 2018 r. I premiery
RxJS 6
nowego sposobu uzyskania Observable z wartości jest zaimportowanieof
operatora w następujący sposób:import { of } from 'rxjs';
a następnie utwórz obserwowalne z wartości, na przykład:
of(someValue);
Zwróć uwagę, że
Observable.of(someValue)
w aktualnie zaakceptowanej odpowiedzi musiałeś postępować podobnie. Jest dobry artykuł na innych RxJS 6 zmian tutaj .źródło
Wydaje się, że sytuacja uległa zmianie od czasu Angular 2.0.0
.next()
Funkcja zostanie wywołana na abonenta.źródło
of
funkcji rxjs, na przykładimport 'rxjs/add/observable/of'
W ten sposób można utworzyć proste obserwowalne dla danych statycznych.
Mam nadzieję, że ta odpowiedź jest pomocna. Zamiast danych statycznych możemy użyć wywołania HTTP.
źródło
W ten sposób możesz stworzyć Observable z danych, w moim przypadku muszę prowadzić koszyk:
service.ts
Component.ts
źródło