刷新HTML组件角度6

问题描述 投票:2回答:1

我正在使用角度6,并且具有以下组件

在ngOnInit上具有此代码的MainComponent.ts:

ngOnInit() {
   console.log('OnInit');    
   this.route.params.subscribe(params => {
     if (params['id'] != null) {
       this.id= params['id']
     }
   });
 }

然后是MainComponent.HTML上的内容

<DataComponent [id]="id"></DataComponent>
<TableComponent [id]="id"></TableComponent>
<FieldComponent [id]="id"></FieldComponent>

路线是:http://localhost:4200/Data/77

在我需要克隆或更改ID之前,一切都很好,因此我需要MainComponent刷新所有ID。我做了以下代码:

this.router.navigate(['/Data', result.id_cloned_data]);

URL更改为例如:http://localhost:4200/Data/399,但是MainComponent不刷新。我做了一个EventEmitter,将新的ID传递给MainComponent,但是它仍然不起作用,我已经在AppRoutes上尝试过onSameUrlNavigation:'reload'。

我在做什么错?它不是要重载,所以每个组件都从API调用其Get吗?

angular angular-ui-router angular6
1个回答
0
投票

变量1:

public bookId$: Observable<string> // 'id' is bad name for variable, remember about code readability;

ngOnInit() {  
    this.bookId$ = this.activatedRoute.paramMap.pipe(
      map((param) => {
        return param.get('BOOK_ID');
      }),
    );
 }

组件模板:

<DataComponent [bookId]="bookId$ | async"></DataComponent>
<TableComponent [bookId]="bookId$| async"></TableComponent>
<FieldComponent [bookId]="bookId$ | async"></FieldComponent>.

变种2:

1] DataComponent模板:

<router-outlet></router-outlet>

2)路由器配置示例:

  {
    children: [
      {
        component: DataChildComponent,
        path: ':BOOK_ID',
      },
    ],
    component: DataComponent,
    path: 'Data',
  },

3] DataChildComponent模板:

<DataComponent [bookId]="bookId$ | async"></DataComponent>
<TableComponent [bookId]="bookId$| async"></TableComponent>
<FieldComponent [bookId]="bookId$ | async"></FieldComponent>

4)DataChildComponent:

public bookId$: Observable<string>;

ngOnInit() {  
    this.bookId$ = this.activatedRoute.paramMap.pipe(
      map((param) => {
        return param.get('BOOK_ID');
      }),
    );
 }

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.