2

路由更改时如何更新组件。我有这个组件:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { ListService } from '../list/list.service';

@Component({
  selector: 'view',
  template: `
    <div *ngIf="!entity">
    <p>Select <b (click)="showRow()">row {{entity}}</b>!</p>
    </div>
    <div *ngIf="entity">

      <p >{{entity.id}}</p>
      <p >{{entity.name}}</p>
      <p >{{entity.weight}}</p>
      <p >{{entity.symbol}}</p>
    </div>
  `,
  styles: []
})
export class ViewComponent implements OnInit {

  constructor(
    private route: ActivatedRoute,
    private service: ListService
  ) {
    this.route.params.subscribe(params => {
      const id = parseInt(params['id']);
      if (id) {
        const entity = this.service.getRow(id);
        this.entity = entity
      }
    });
  }

  entity;

  showRow() {
    console.log(this.entity);
  }

  ngOnInit() {
  }
}

this.entity内部构造函数中,我有所需的对象,但是当我执行 showRow 时this.entity未定义,我做错了什么?我试图将属性更改为不同的名称,但它没有按预期工作,如果有人知道如何解决这个问题或指出我正确的方向。

编辑:来自服务的 getRow

getRow(id) {
  console.log(id, 'test');
  return this.datasource.find(row => row.id === id);//returns good row
}
4

3 回答 3

1

将您的代码移动到ngOnInit()方法并检查您是否获得价值。

  ngOnInit() {
    this.route.params.subscribe(params => {
     const id = parseInt(params['id']);
     if (id) {
         const entity = this.service.getRow(id);
         this.entity = entity
     }
   });
 }
于 2017-09-12T05:32:51.817 回答
0

我找到了问题的答案,我只需要router-outlet像这样输入模板:

....
....
template: `
  <router-outlet>
    <div *ngIf="row?.id; else elseBlock">
    <div>
      <p>{{row.id}}</p>
      <p>{{row.name}}</p>
      <p>{{row.weight}}</p>
      <p>{{row.symbol}}</p>
    </div>
    </div>
  </router-outlet>
`,
于 2017-09-12T10:56:12.910 回答
0

我相信您需要定义/初始化entity位于 showRow 上方的,例如:

const entity = Entity;

或类似的规定。抱歉,我对 Angular 也很陌生。

于 2017-09-12T05:33:48.730 回答