从Angular 5组件访问超类字段

时间:2017-11-25 19:25:32

标签: javascript angular inheritance angular5

我有一个超类,它包含组件的通用功能。

export class AbstractComponent implements OnInit {

  public user: User;

  constructor(public http: HttpClient) {
  }

  ngOnInit(): void {
    this.http.get<User>('url').subscribe(user => {
      this.user = user;
    });
  }
}

我有一个实现这个超类的子类。

@Component({
  selector: 'app-header',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.scss']
})
export class HeaderComponent extends AbstractComponent {

  constructor(public http: HttpClient) {
    super(http);
  }
}

在标题模板中,我试图访问用户

<mat-toolbar color="primary">
  <span *ngIf="user">Welcome {{user.username}}!</span>
</mat-toolbar>

但用户字段尚未解析。如何从子类访问超类的字段?

2 个答案:

答案 0 :(得分:5)

您收到错误,因为user对象在加载时不可用。

无论是初始化还是使用模板中的安全导航操作符(?.

initalise:

public user: User = new User();

安全导航:

<span>Welcome {{user?.username}}!</span>

答案 1 :(得分:2)

这种方法有效,但这不是一个好习惯。在这种情况下,最好使用Method | Small A | Large A -------------------------------- rahnema1 | 9.6752e-06 | 0.0115 m7913d | 5.8634e-06 | 0.0056 管道:

A=[56  55  53  52  53;
  49  45  44  45  47;
  33  30  31  34  35;
  34  34  27  24  26;
  44  48  45  35  24;
  56  57  57  53  39;
  62  62  62  60  55;
  62  61  61  54  47;
  49  47  42  40  32;
  47  42  44  45  40];
B=[34 27 24];
A_large = repmat(A, 100, 100);

t_m7913d = timeit(@() m7913d(A, B))
t_rahnema = timeit(@() rahnema1(A, B))

t_large_m7913d = timeit(@() m7913d(A_large, B))
t_large_rahnema = timeit(@() rahnema1(A_large, B))

 function [row_h, col_h, row_v, col_v] = m7913d(A, B)
    Ah = true(size(A) - [0 length(B)-1]);
    Av = true(size(A) - [length(B)-1 0]);
    for i=1:length(B)
        Ah= Ah & A(:, i:end-3+i) == B(i);
        Av= Av & A(i:end-3+i, :) == B(i);
    end
    [row_h, col_h] = find(Ah);
    [row_v, col_v] = find(Av);
end

function [row_h, col_h, row_v, col_v] = rahnema1(A, B) 
    n = numel(B);
    C = A == reshape(B,1,1,n);
    mask_h = permute(eye(n),[3 2 1]);
    mask_v = permute(eye(n),[1 3 2]);
    [row_h, col_h]=find(convn(C,mask_h,'valid')==n);
    [row_v, col_v]=find(convn(C,mask_v,'valid')==n);
end