Делаю сервис со своей логикой но возникают ошибки

193
08 ноября 2017, 04:02

Делаю сервис со своей логикой но возникают ошибки:

  1. в сервисе:

Type 'Subscription' is not assignable to type 'Observable'.
Property '_isScalar' is missing in type 'Subscription'.

  1. в компоненте:

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, 
      )); 
  } 
}

Answer 1

.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'))
READ ALSO
Webpack. Не подключаются библиотеки

Webpack. Не подключаются библиотеки

Подключаю библиотеки через один файл посредством того что копирую минифицированый код поочередно в один файл а потом подключаю уже только...

177
Ошибка в AngularJS. В чем проблема?

Ошибка в AngularJS. В чем проблема?

Подскажите, где я ошибся в данном коде? Почему ng-controller отказывается работать? Спасибо заранее

175
как задать значение свойству через js в asp.net mvc

как задать значение свойству через js в asp.net mvc

Допустим в представление есть 2 числовых поляВ первое мы вводим значение свойству в модели, а второе поле js сам изменяет по какой-то формуле...

187
Сохранение данных в куки

Сохранение данных в куки

Как сохранить имя пользователя в куки из импута

396