【问题标题】:How to navigate between pages in ionic 4 & 5?如何在离子 4 和 5 中的页面之间导航?
【发布时间】:2019-12-25 15:15:27
【问题描述】:

我有一个使用 ionic 3 开发的项目。但是我休息了一下,当我再次开始使用 ionic 时,我看到新版本中的导航系统发生了变化。我的项目是一个简单的项目。该项目列出了 a 数组中的数据以及有关数据的详细信息显示在不同的页面上。

我在 Ionic 3 上这样做: homepage.ts

 export class HomePage  {

  items = [];

    constructor(public navCtrl: NavController) {
      this.initializeItems();}
      initializeItems() {
      this.items = [
   {
    'title': 'John',
    'image': '',
    'hair': 'black',
  },
   {
    'title': 'Brendon',
    'image': '',
    'hair': 'blonde',
  }];

openNavDetailsPage(item) {
    this.navCtrl.push(DetailsPage, { item: item });
  }

detailspage.ts

 export class DetailsPage {
   item;

   constructor(params: NavParams) {
     this.item = params.data.item;
   }
 }

NavCtrl 和 NavParams 在版本 5 中不再可用(我认为在版本 4 中)。我确实从主页导航到下一页(离子 5)。 homepage.ts:

    toDetailsPage(){
      this.router.navigate(['details'])
    }

但是,我无法根据列表中的数据进行导航。按照次世代版本怎么做?

【问题讨论】:

    标签: ionic4 angular-router pass-data navparams ion-nav


    【解决方案1】:

    app.routing.module.ts(路由模块)

    const itemRoutes: Routes = [
        { path: 'item', component: ItemListComponent},
        { path: 'DetailsPage/:id', component: DetailComponent  }
    ];
    

    homepage.ts 文件

    import { Router } from '@angular/router';
    
      export class HomePage  {
        
              constructor(private router: Router)
        
              openNavDetailsPage(item) {
                this.router.navigate(['/DetailsPage', { item: item }]);
              }
         }
    

    .html 文件

    如果你想直接通过html页面路由:

    <ion-button routerLink="/DetailsPage">Log In </ion-button>
    

    <ion-button [routerLink]="['/DetailsPage', item.id]">Log In </ion-button>
    

    detail.ts 文件

    import { ActivatedRoute, Router } from '@angular/router';
    
    export class DetailComponent implements OnInit {
    
      id: any;
    
      constructor(private route: ActivatedRoute,
        private router: Router) { }
    
      ngOnInit() {
         this.id = this.route.snapshot.paramMap.get('id');
       }
    }
    

    除了使用 JSON

    homepage.ts 文件

    this.router.navigate(['/DetailsPage', { item: JSON.stringify(item) }]);
    

    detail.ts 文件

    this.item = JSON.parse(this.route.snapshot.paramMap.get('item'));
    

    另一种方式

    homepage.html

    <div *ngFor=""let item of items"> // here items is an array
       <button (click)="goToDetail(item)" class="rgt-btn">
            <ion-icon slot="icon-only" name="add-circle" ></ion-icon>
       </button>
    </div>
    

    homepage.ts

       import { NavigationExtras, Router } from '@angular/router';
        
          export class HomePage  {
        
            constructor(private router: Router)
        
            goToDetail(item){
               let navigationExtras: NavigationExtras = item; 
               this.router.navigate(['/DetailsPage'], navigationExtras);
             }
         }
    

    DetailsPage.ts

    import { Router } from '@angular/router';
    
    export class DetailComponent implements OnInit {
    
      item: any;
    
      constructor(private router: Router) {
        if (this.router.getCurrentNavigation()) {
            this.item = this.router.getCurrentNavigation().extras;
      }
     }
        
    

    }

    > 或借助服务页面

    import { Injectable } from '@angular/core';
    
    @Injectable({
      providedIn: 'root'
    })
    export class NavExtrasService {
    
        extras: any;
    
          constructor() { }
    
          public setExtras(data){
            this.extras = data;
          }
    
          public getExtras(){
            return this.extras;
          }
        }
    

    假设我正在从主页导航到详细信息页面,在页面 A:

    this.navExtras.setExtras(extras)
    this.router.navigateByUrl('detailPage');
    

    然后在详细信息页面中,我以这种方式检索附加内容:

     let newData: any;
     this.newData = navExtras.getExtras();
    

    【讨论】:

    • 我们的数据在 homepage.ts 中。我应该创建一个 ItemList 页面并将其添加到路由器吗?还是应该在主页中创建一个单独的组件?
    • 创建一个ItemList页面并将其添加到路由器中
    • 如何连接 ItemList 和 home 和 Details?我创建了 ItemListPage 并在该页面中添加了我的数据。
    • 只需创建服务(提供者)页面并在那里执行功能......借助服务页面您可以获取数据
    • 这成功了!谢谢你。在这种情况下,我可以通过使用 this.route.snapshot.paramMap.get('otherparam'); 发送多个参数;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多