【问题标题】:Data is not passed on to id page数据未传递到 id 页面
【发布时间】:2019-07-22 18:11:18
【问题描述】:

我想将项目数据传递到详细信息页面。导航工作正常。但是,如果我想使用字符串插值来输出所选项目,则什么都没有(空输出)。我尝试使用 app-routing.module,但没有奏效。

这是我的代码。

item.html

 <ion-title> {{ item.username }} </ion-title>

item.ts

loadedItems: Item[];
  item: Item;
...
    openRankdet() {
        this.router.navigate(['itemdetail/:id'])
      }

item.model.ts

export class Item {
    constructor(
        public id: string, 
        public username: string, 
        public imageUrl: string,
        public imageUrl2: string,
         ) {

         }
}

项目服务

 private _item: Item[] = [ //dummy data
    new Item(
     'r1',
     'Martin',
     'assets/7.jpeg',
     'assets/two.jpeg',
     ),
];
...
 get item() {
    return [...this._item];
  }

  constructor() { }

  getItem(id: string) {
    return {...this._item.find(r => r.id === id)};
  }

itemdetail.ts

item: Item;  //store item data model
constructor() {}
...
ngOnInit() {
    this.route.paramMap.subscribe(paramMap => {
      if (!paramMap.has('id')) {
        this.router.navigate[('item')];
        return;
      }
      this.item = this.itemservice.getItem(paramMap.get('id'));
    }); 

}

app-routing.module.ts

    ...
     { path: 'itemdetail/:id', loadChildren: './itemdetail/itemdetail.module#ItemdetailPageModule' },
    ...

【问题讨论】:

  • 你能告诉我你的 itemdetail.ts 中 paramMap.get('id') 的结构吗
  • 您指的是哪一部分?上面的代码就是关于这个问题或主题的全部内容。

标签: angular typescript ionic-framework ionic4


【解决方案1】:

我实际上是通过使用问题中的所有代码解决了这个问题,但使用的是 routerLink 而不是点击事件。 [routerLink]="['/itemdetail', item.id]

【讨论】:

    【解决方案2】:

    在您的 item.service 中,尝试:

    //dummy data
     private _items: Item[] = [ 
        {
         id: 'r1',
         username: 'Martin',
         imageUrl: 'assets/7.jpeg',
         imageUrl2: 'assets/two.jpeg',
         },
    ];
    
     get item() {
        return [...this._items];
      }
    
      constructor() { }
    
      getItem(id: string) {
        let item: Item;
        for (let i = 0; i < this._items.length; i++) {
          if(this._items[i].id == id) {
             item = this._items[i];
             break;
          }
        }
       return item;
      }
    

    在您的 item.ts 中,尝试:

    openRankdet() {
        this.router.navigate(['itemdetail/' + this.item.id])
      }
    

    【讨论】:

    • 如果我尝试不再被导航:(
    • 是的TypeError: undefined is not an object (evaluating 'this.item.id')
    • 在你的 ngOnInit 中,在 this.item = this.itemservice.getItem(paramMap.get('id')); 之后添加 console.log(this.item); 看看你得到了什么。你可以将你的 router.navigate 改回 'itemdetail/:id' 但我猜你会在地址栏中看到的 url 实际上会说 /itemdetail/:id 这不是你想要的跨度>
    • 因为我没有被您的解决方案路由并且ngOnInit() {} 没有启动。我使用了问题中的代码并 consol 记录了它。奇怪的是我只记录:{}
    • 你需要使用我的路径,但只有在你确定你已经通过调用this.itemservice.getItem(paramMap.get('id')); 获得了正确的项目之后,请尝试我的最新编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多