Felino
@Felino

Что не так? В чем ошибка?

import { Injectable } from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {Observable, of} from 'rxjs';
import {Task1Module} from '../module/task1.module';
import {catchError, tap} from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class Task1Service {

  connect="../assets/Task1.json";

  constructor(private http:HttpClient) {  }

  private handleError<T>(operation = 'operation', result?: T) {
    return (error: any): Observable<T> => {
      console.error(error);
      return of(result as T);
    };
  }

  GetData():Observable<Task1Module[]>{
    return this.http.get<Task1Module[]>(this.connect).pipe(
      tap((obj)=>console.log(obj)),
      catchError(this.handleError('get data',[]))
    );
  }

}

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import {Observable} from 'rxjs';



@NgModule({
  declarations: [],
  imports: [
    CommonModule
  ]
})
export class Task1Module {
  constructor(
    public distance:Observable<distance>,
    public convert_to:string
  ) {
  }
}
export class distance{
  constructor(
    public unit:string,
    public value: number
  ) {
  }
}

Ошибка вот здесь!!!
Error:(27, 24) TS2339: Property 'unit' does not exist on type 'Observable'
Error:(29, 13) TS2322: Type 'number' is not assignable to type 'string'.
import {Component, OnInit} from '@angular/core';
import {Task1Service} from '../service/task1.service';
import {distance, Task1Module} from '../module/task1.module';

@Component({
  selector: 'app-task1',
  templateUrl: './task1.component.html',
  styleUrls: ['./task1.component.css']
})
export class Task1Component implements OnInit {

  data: Task1Module[] = [];
  i = 0;
  data1: distance[] = [];

  constructor(private http: Task1Service) {
  }


  ngOnInit() {
    this.http.GetData().subscribe((obj) => {
      this.data = obj;


      for (let a of this.data) {
        // Переводим сантиметры
        if (a.distance.unit == 'cm') {
          if (a.convert_to == 'm') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value * 100);
          }
          if (a.convert_to == 'in') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value / 10 / 25.4);
          }
          if (a.convert_to == 'ft') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value / 10 / 304.8);
          }
        }
        // Переводим дюймы
        if (a.distance.unit == 'in') {
          if (a.convert_to == 'm') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value * 25.4 / 10 / 100);
          }
          if (a.convert_to == 'cm') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value * 25.4 / 10);
          }
          if (a.convert_to == 'ft') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value * 25.4 / 304.8);
          }
        }
        // Переводим футы
        if (a.distance.unit == 'ft') {
          if (a.convert_to == 'm') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value * 304.8 / 10 / 100);
          }
          if (a.convert_to == 'cm') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value * 304.8 / 10);
          }
          if (a.convert_to == 'in') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value * 304.8 / 25.4);
          }
        }
        // Переводим метры
        if (a.distance.unit == 'm') {
          if (a.convert_to == 'ft') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value / 100 / 10 / 304.8);
          }
          if (a.convert_to == 'cm') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value / 100);
          }
          if (a.convert_to == 'in') {
            this.data1[this.i] = new distance(a.convert_to, a.distance.value / 100 / 10 / 25.4);
          }
        }
        this.i = this.i + 1;
      }
      console.log(this.data1);
    });
  }

}

[
  {
    "distance": {
      "unit": "m",
      "value": "1"
    },
    "convert_to": "cm"
  },
  {
    "distance": {
      "unit": "cm",
      "value": "1"
    },
    "convert_to": "km"
  },
  {
    "distance": {
      "unit": "cm",
      "value": "1"
    },
    "convert_to": "mm"
  }
]
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
потому что
export class Task1Module {
  constructor(
    public distance:Observable<distance>,
    public convert_to:string
  ) {
  }
}


поле distance это Observable, а у него нет свойства unit
а потом вы еще convert_out.value пытаетесь число присвоить, а оно является строкой.

Пишите все по человечески и такое будет сразу видно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы