类型 'null' 不可分配给 Angular 中的类型 'number'
Type 'null' is not assignable to type 'number' in Angular
我正在尝试在 Angular 中创建应用程序,但我收到 “类型 'null' 无法分配给类型 'number' 错误。问题是,如果我尝试使用 'id' 中的“任何”参数来更正此错误,那么当我单击首页上的任一面板时,应用程序不会向我显示详细信息。
期望的结果是,如果我单击任何面板:
Desired result
应用应该会显示详细信息:
Desired result 2
这是我的代码:
service.ts:
import { Observable, of } from 'rxjs';
import { Ejercicio } from './ejercicio';
import { EJERCICIOS } from './collection-ejercicios';
@Injectable({
providedIn: 'root'
})
export class EjercicioService {
constructor() { }
getEjercicios():Observable<Ejercicio[]>{
return of(EJERCICIOS);
}
getEjercicio(id:number):Observable<Ejercicio>{
console.log("Id solicitado: "+id);
return of(EJERCICIOS.find(ejercicio=>ejercicio.id===id)!);
}
}
ejercicio.component.ts:
import { Ejercicio } from '../ejercicio';
import { EjercicioService } from '../ejercicio.service';
@Component({
selector: 'app-ejercicios',
templateUrl: './ejercicios.component.html',
styleUrls: ['./ejercicios.component.css']
})
export class EjerciciosComponent implements OnInit {
ejercicios!: Ejercicio[];
ejercicioSeleccionado:Ejercicio | undefined;
constructor(private ejercicioService: EjercicioService) {
console.log("---Componente Ejercicios CREADO ---");
}
getEjercicios():void {
this.ejercicioService.getEjercicios().subscribe(ejercicios=>this.ejercicios=ejercicios);
}
ngOnInit(): void {
console.log("---Componente Ejercicios[ngOnInit] ---");
this.getEjercicios();
}
onSelectEjercicio(ejercicio: Ejercicio): void {
console.log("Ejercicio seleccionado="+ejercicio.id);
this.ejercicioSeleccionado=ejercicio;
}
}
ejercicio-detalle.component.ts:
import { Component, Input, OnInit } from '@angular/core';
import { Ejercicio } from '../ejercicio';
import { ActivatedRoute } from '@angular/router';
import { EjercicioService } from '../ejercicio.service';
@Component({
selector: 'app-ejercicio-detalle',
templateUrl: './ejercicio-detalle.component.html',
styleUrls: ['./ejercicio-detalle.component.css']
})
export class EjercicioDetalleComponent implements OnInit {
ejercicio!: Ejercicio;
constructor(private route:ActivatedRoute, private ejercicioService: EjercicioService) { }
ngOnInit(): void {
this.getEjercicio();
}
getEjercicio():void{
const id=this.route.snapshot.paramMap.get('id');
this.ejercicioService.getEjercicio(id).subscribe(ejercicio=>this.ejercicio=ejercicio)
}
}
这是我收到错误消息的行:
Error message
我已经通过在 ejercicio.service.ts 文件中添加 id:any 设法消除了错误,但是在这种情况下,当我编译应用程序时,我没有得到想要的结果(应用程序没有单击前面板时显示详细信息)。
如有任何帮助,我将不胜感激。
谢谢,
由于 paramMap
可能 而不是 包含 id
,您必须检查您的代码以确保它确实已定义。要解决此特定问题,您只需检查它是否存在,如下所示:
getEjercicio(): void {
const id = this.route.snapshot.paramMap.get('id');
if (id) { // Add your check here. "id !== null" would work, too.
const idAsNum = parseInt(id);
// Check if this string is Not a Number.
// If so, return, we can't continue.
if (idAsNum === NaN) {
return;
}
this.ejercicioService
.getEjercicio(idAsNum)
.subscribe(ejercicio => this.ejercicio = ejercicio)
}
}
这可能无法解决您遇到的数据未显示的问题。您可能需要使用 Angular 才能使其按预期工作。
我正在尝试在 Angular 中创建应用程序,但我收到 “类型 'null' 无法分配给类型 'number' 错误。问题是,如果我尝试使用 'id' 中的“任何”参数来更正此错误,那么当我单击首页上的任一面板时,应用程序不会向我显示详细信息。
期望的结果是,如果我单击任何面板:
Desired result
应用应该会显示详细信息:
Desired result 2
这是我的代码:
service.ts:
import { Observable, of } from 'rxjs';
import { Ejercicio } from './ejercicio';
import { EJERCICIOS } from './collection-ejercicios';
@Injectable({
providedIn: 'root'
})
export class EjercicioService {
constructor() { }
getEjercicios():Observable<Ejercicio[]>{
return of(EJERCICIOS);
}
getEjercicio(id:number):Observable<Ejercicio>{
console.log("Id solicitado: "+id);
return of(EJERCICIOS.find(ejercicio=>ejercicio.id===id)!);
}
}
ejercicio.component.ts:
import { Ejercicio } from '../ejercicio';
import { EjercicioService } from '../ejercicio.service';
@Component({
selector: 'app-ejercicios',
templateUrl: './ejercicios.component.html',
styleUrls: ['./ejercicios.component.css']
})
export class EjerciciosComponent implements OnInit {
ejercicios!: Ejercicio[];
ejercicioSeleccionado:Ejercicio | undefined;
constructor(private ejercicioService: EjercicioService) {
console.log("---Componente Ejercicios CREADO ---");
}
getEjercicios():void {
this.ejercicioService.getEjercicios().subscribe(ejercicios=>this.ejercicios=ejercicios);
}
ngOnInit(): void {
console.log("---Componente Ejercicios[ngOnInit] ---");
this.getEjercicios();
}
onSelectEjercicio(ejercicio: Ejercicio): void {
console.log("Ejercicio seleccionado="+ejercicio.id);
this.ejercicioSeleccionado=ejercicio;
}
}
ejercicio-detalle.component.ts:
import { Component, Input, OnInit } from '@angular/core';
import { Ejercicio } from '../ejercicio';
import { ActivatedRoute } from '@angular/router';
import { EjercicioService } from '../ejercicio.service';
@Component({
selector: 'app-ejercicio-detalle',
templateUrl: './ejercicio-detalle.component.html',
styleUrls: ['./ejercicio-detalle.component.css']
})
export class EjercicioDetalleComponent implements OnInit {
ejercicio!: Ejercicio;
constructor(private route:ActivatedRoute, private ejercicioService: EjercicioService) { }
ngOnInit(): void {
this.getEjercicio();
}
getEjercicio():void{
const id=this.route.snapshot.paramMap.get('id');
this.ejercicioService.getEjercicio(id).subscribe(ejercicio=>this.ejercicio=ejercicio)
}
}
这是我收到错误消息的行:
Error message
我已经通过在 ejercicio.service.ts 文件中添加 id:any 设法消除了错误,但是在这种情况下,当我编译应用程序时,我没有得到想要的结果(应用程序没有单击前面板时显示详细信息)。
如有任何帮助,我将不胜感激。
谢谢,
由于 paramMap
可能 而不是 包含 id
,您必须检查您的代码以确保它确实已定义。要解决此特定问题,您只需检查它是否存在,如下所示:
getEjercicio(): void {
const id = this.route.snapshot.paramMap.get('id');
if (id) { // Add your check here. "id !== null" would work, too.
const idAsNum = parseInt(id);
// Check if this string is Not a Number.
// If so, return, we can't continue.
if (idAsNum === NaN) {
return;
}
this.ejercicioService
.getEjercicio(idAsNum)
.subscribe(ejercicio => this.ejercicio = ejercicio)
}
}
这可能无法解决您遇到的数据未显示的问题。您可能需要使用 Angular