Angular 4 - 使用导航路由器

时间:2017-10-31 13:05:18

标签: angular primeng-datatable

我有一个用Ngprime Datatable完成的html表,当我连续点击时,抛出下一个路径:

// First component
    onRowSelect(event) {
    console.log(event.data); // for the moment everything is ok
    this.router.navigate(['/search/' + event.data]);    
}

在“event.data”中,我选择了html表的寄存器json,如果我在“console.log”中显示“event.data”的内容,将会看到具体的json寄存器。

问题是,当我尝试从试图获取它的组件中获取json时,它无法正常工作,它将其检测为对象,但我看不到对象内容。

// Second component
this.activatedRoute.params.subscribe((params: Params) => {
    let newRow  = params['newRow'];
    if(newRow) {
    console.log("newRow:", newRow); // This console shows "newRow: [object Object]", here I have the problem
    }
});

这是我在路由文件配置中的路径:

const appRoutes: Routes = [
  {
    path: 'search/:newRow',
    component: MainComponent
  }
];

可能是什么问题?

2 个答案:

答案 0 :(得分:0)

我猜最好的镜头是stringify它(你在另一个组件上解析它):

...

答案 1 :(得分:0)

您尝试在路由参数中发送复杂对象,请勿执行此操作。路由器正在调用默认的字符串方法,该方法正在销毁您的数据。而是使用共享服务:

@Injectable()
export class RowDetailService {
    rowDetailSource: BehaviorSubject<any> = new BehaviorSubject(null);
    rowDetail$: Observable<any> = this.rowDetailSource.asObservable();
    setRowDetail(detail:any) {
        this.rowDetailSource.next(detail);
    }
}

然后在第一个组成部分:

onRowSelect(event) {
    console.log(event.data); // for the moment everything is ok
    this.rowDetailService.setRowDetail(event.data);
    this.router.navigate(['/search/detail']);    
}

然后在第二部分:

this.rowDetailService.rowDetail$.subscribe(row => {
    console.log(row); // do whatever with it
});

甚至更好的方法是将参数设置为该数据的唯一标识符,并使用与该表相同的数据源来检索该行。