我目前在Ionic应用程序开发课程中遇到一些问题,该课程假定使用Ionic 4或Ionic 5,而我正在使用版本7.具体地说,我遇到了有关路由的问题.

提供的代码成功地显示了http://localhost:8101/recipes.的主页但是,当try 访问http://localhost:8101/recipes/r1,时,只会显示一个空白页面.

我怀疑版本差异可能是问题的原因.您能帮助我确定必要的更新或修改,以使此Ionic应用程序与版本7无缝工作吗?

以下是相关代码的片段:

下面是Receipe.Model.ts文件:

export class Recipe {
    id: string = '';
    title: string = '';
    imageUrl: string = '';
    ingredients: string[] = [];
}

const recipe: Recipe = new Recipe();  

以下是Deciplees.Serice.ts文件:

import { Injectable } from '@angular/core';
import { Recipe } from './recipe.model';

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

  private recipes: Recipe[] = [
    {
      id:'r1',
      title: 'Scnitzel',
      imageUrl:'https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Breitenlesau_Krug_Br%C3%A4u_Schnitzel.JPG/220px-Breitenlesau_Krug_Br%C3%A4u_Schnitzel.JPG',
      ingredients: ['French Fries','Pork Meat','Salad']
    },
    {
      id:'r2',
      title: 'Spaghetti',
      imageUrl:'https://upload.wikimedia.org/wikipedia/commons/2/2a/Spaghetti_al_Pomodoro.JPG',
      ingredients: ['Spaghetti','Meat','Tomatoes']
    }
  ];

  constructor() { }

  getAllRecipes(){
    return [...this.recipes];
  }

  getRecipe(recipeId: string){
    return{
      ...this.recipes.find(recipes=>{
        return recipes.id === recipeId;
      })!
      
    }
  }
}

下面是recipe-detail.page.ts文件:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { RecipesService } from '../recipes.service';
import { Recipe } from '../recipe.model';

@Component({
  selector: 'app-recipe-detail',
  templateUrl: './recipe-detail.page.html',
  styleUrls: ['./recipe-detail.page.scss'],
})
export class RecipeDetailPage implements OnInit {
  loadedRecipe: Recipe = new Recipe();

  constructor(
    private activatedRoute: ActivatedRoute, 
    private recipesService: RecipesService) 
    { }

  ngOnInit() {
    this.activatedRoute.paramMap.subscribe(paramMap =>{
      if (!paramMap.has('recipeId')) {
        //redirect
        return;
      }
      const recipeId = paramMap.get('recipeId')!;
            this.loadedRecipe = this.recipesService.getRecipe(recipeId)!;

    });
  }

}

下面是Recipe-Detail.page.html文件:

<ion-header [translucent]="true">
  <ion-toolbar color="primary">
    <ion-title>{{ loadedRecipe.title }}</ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>
  <ion-grid no-padding>
    <ion-row>
      <ion-col no-padding>
        <ion-img [src]="loadedRecipe.imageUrl"></ion-img>
      </ion-col>
    </ion-row>
    <ion-row>
      <ion-col>
        <h1>{{ loadedRecipe.title }}</h1>
      </ion-col>
    </ion-row>
    <ion-row>
      <ion-col>
        <ion-list>
          <ion-item *ngFor="let ig of loadedRecipe.ingredients">
            {{ ig }}
          </ion-item>
        </ion-list>
      </ion-col>
    </ion-row>
  </ion-grid>
</ion-content>

我试着在YouTube上寻找答案,但也没有太多的运气.

推荐答案

感谢你们的闪电战!

解释一下.

<>/recipe-detail/id1

在上面的URL中,我们将recipe-detailapp-routing.ts上的路径定义进行匹配,这是可以的

但如果您查看下一节id1,这将是我们的配方ID,但如果我们查看recipe-detail-routing.module.ts,我们只定义了一条路由,路径为'',因此它只匹配<<basepath>>/recipe-detail,但我们需要匹配<<basepath>>/recipe-detail/:recipeId,所以我将路径:recipeId添加到路由,以便ID匹配并呈现详细信息!

所做的更改:

Html-我添加了routerLink以导航到详细页面!

<ion-list>
  <ion-item *ngFor="let recipe of recipes" [routerLink]="['recipe-detail', recipe.id]">
<ion-avatar>

Recipe-Detail-routing.mode.ts-我们使用的是receiptId路由参数,但它不在路径定义中,所以我添加了它!

const routes: Routes = [
  {
    path: ':recipeId', // <- changed here
    component: RecipeDetailPage
  }
];

stackblitz demo

Angular相关问答推荐

根据Angular中的构建来卸载独立组件

如何将CDkDropList与Angular FormArray和FormGroup一起使用?

使用当前选定的选项创建IF语句

当项目具有BrowserAnimationsModule时,Angular UI未拾取数据模型更改

Angular 16独立依赖注入问题

无法匹配任何路由.URL段:';英雄';

Angular react 形式验证问题

如何修复不允许的HttpErrorResponse 405?

JsPDF Autotable 将图像添加到列中出现错误:属性getElementsByTagName不存在

Angular 为什么延迟加载返回空路径?

需要做什么才能使 ErrorHandler 正常工作?

如何有条件地更新 Angular 路由解析器数据?

Angular:try 在点击次数后禁用按钮

无法推送 Angular 项目 - Github

带有重定向的Angular 2 AuthGuard服务?

为什么 Angular2 (click) 事件没有在

更改 Select 选项时获取当前值

如何在 Angular 2 中创建可重用的动画

如何在悬停时向元素添加类?

MatToolbar 与 Angular 9 一起使用时抛出错误