Angular routerLink不会触发ngOnInit

时间:2019-04-24 04:42:19

标签: angular typescript angular-routerlink

这是componet.ts文件中的ngOnInit

ngOnInit() {
      this.locationService.getLocation().subscribe( locations => {
      this.locations = locations;
    });
  }
<a [routerLink]="['/locations-list']">

当我使用[routerLink]导航到上述组件时,它将导航到该组件并加载视图,但不会在 ngOnInit 方法上方触发。但是,如果我刷新页面,它就可以正常工作。
以上问题是否有解决方法?

我已经使用href导航到页面,并且使用上述href的方法始终可以正常工作,但是速度很慢。这就是为什么我将href更改为[routerLink]

这是包含视图的component.html

                <div class="table-responsive">
                  <table class="table">
                    <thead class=" text-primary">
                      <th>
                        Location Name
                      </th>

                    </thead>
                    <tbody *ngIf="locations?.length > 0">
                      <tr *ngFor="let location of locations">
                        <td *ngIf="location.verified != false">
                          {{location.locationName}}
                        </td>
                      </tr>
                    </tbody>
                  </table>
                </div>
              </div>

3 个答案:

答案 0 :(得分:1)

当路由器参数更改时,基本路由保持不变。因此它不会触发ngOnInit。因此,订阅路由事件

ngOnInit() {
     this.route.params.subscribe(
     params => { 
            // your code
     });
  }

答案 1 :(得分:1)

ngOnInit()仅在实例化组件后调用一次,但在路由更改时不会调用。您可以注入路由器并订阅其事件或参数,以获取有关路由更改的通知。

ngOnInit() {
     this.route.params.subscribe(params: any) => {
       if(params) //your code
    });
}

答案 2 :(得分:1)

  

尝试一下

import torch 

B, C = 4, 3

input = torch.randn(B, C)
"""
>>> input
tensor([[-0.5043,  0.9023, -0.4046],
        [-0.4370, -0.8637,  0.1674],
        [-0.5451, -0.5573,  0.0531],
        [-0.6751, -1.0447, -1.6793]])
"""

target = torch.randint(low=0, high=C, size=(B, ))
"""
>>> target
tensor([0, 2, 2, 1])
"""

# The unrolled version
nll = 0
nll += input[0][target[0]] # add -0.5043
nll += input[1][target[1]] # add -0.1674
nll += input[2][target[2]] # add  0.0531
nll += input[3][target[3]] # add -1.0447
nll *= (-1/B)
print(nll)
# tensor(0.3321)


# The compact way using numpy indexing
_nll = -input[range(0, B), target].mean()
print(_nll)
# tensor(0.3321)