Делаю сервис со своей логикой но возникают ошибки:
Type 'Subscription' is not assignable to type 'Observable'.
Property '_isScalar' is missing in type 'Subscription'.
Argument of type '(params: ParamMap) => Subscription' is not assignable to parameter of type '(value: ParamMap, index: number) => ObservableInput<{}>'. Type 'Subscription' is not assignable to type 'ObservableInput<{}>'. Type 'Subscription' is not assignable to type 'ArrayLike<{}>'. Property 'length' is missing in type 'Subscription'.
компонент:
import { Component, OnInit, Input } from '@angular/core';
import { ActivatedRoute, ParamMap } from '@angular/router';
import { UserServise } from '../users.service';
import { Location } from '@angular/common';
import { users } from '../home/home.component';
import { IUser } from '../IUser';
import 'rxjs/add/operator/switchMap';
@Component({
selector: 'app-details',
templateUrl: './details.component.html',
styleUrls: ['./details.component.css']
})
export class DetailsComponent implements OnInit {
@Input() user: IUser;
constructor(
private userServise: UserServise,
private route: ActivatedRoute,
private location: Location
) { }
ngOnInit(): void {
this.route.paramMap
.switchMap((params: ParamMap) => this.userServise.getLink(+params.get('id'))
.subscribe(user => this.user = user));
}
goBack(): void {
this.location.back();
}
}
сервис:
import { Http } from '@angular/http';
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/of';
import { users } from './home/home.component';
import { IUser } from './IUser';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/switchMap'
@Injectable()
export class UserServise {
constructor(private http: Http) { }
public getUsers() {
return this.http.get('https://jsonplaceholder.typicode.com/users')
.map(response => response.json())
.map(users => {
return users.map(({ id, name, username, email, address, phone, website }) => {
return { id, name, username, email, address, phone, website }
});
});
}
public getLinks(): Observable<IUser[]> {
return Observable.of(users);
}
// public getLinksSlowly(): Observable<IUser[]> {
// return new Promise(resolve => {
// // Simulate server latency with 2 second delay
// setTimeout(() => resolve(this.getLinks()), 2000);
// });
// }
public getLink(id: number): Observable<IUser> {
return this.getLinks()
.subscribe(users => users.find(
user => user.id === id,
));
}
}
.subscribe
возвращает Subscription
, а не Observable
Если вы хотите использовать значения дальше, а не здесь и сейчас - используйте map
import 'rxjs/add/operator/map';
this.getLinks()
.map(users => ...);
Попробуйте также явно указать тип ответа сервиса для switchMap
:
.switchMap((params: ParamMap): Observable<IUser> =>
this.userServise.getLink(+params.get('id'))
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подключаю библиотеки через один файл посредством того что копирую минифицированый код поочередно в один файл а потом подключаю уже только...
Подскажите, где я ошибся в данном коде? Почему ng-controller отказывается работать? Спасибо заранее
Допустим в представление есть 2 числовых поляВ первое мы вводим значение свойству в модели, а второе поле js сам изменяет по какой-то формуле...