由服务返回响应之前运行的Html元素触发的函数

时间:2018-05-16 06:47:51

标签: angular observers angular-observable

我有一个显示链接列表的简单组件。应根据权限显示每个链接\ hide。为了获得权限集,我应该使用服务。 这是HTML的精简版:

<a *ngIf=isVisible(10) routerLink=".." [queryParams]="{id:'10'}">bla1</a>     
<a *ngIf=isVisible(40) routerLink=".." [queryParams]= "{id:'20'}">bla2</a>        

这是组件:

constructor(private reportService : service) {}

ngOnInit() {
  this.reportService.GetReportsPermissions().subscribe(result => 
    {
      this.reportsPersmissions = result;
    }, error => { console.log(error)});
 }

 isVisible(reportTypeID : ReportType) : boolean
 {
   return typeof this.reportsPersmissions != 'undefined' && 
     this.reportsPersmissions.find(rp => rp.ReportType == 
     reportTypeID).IsPermitted;
 }

问题是当服务尚未响应且reportsPersmissions未定义时,将调用isVisible函数。 我可以想到另外一个添加

的选项
*ngIf= reportsPersmissions 

声明作为链接列表周围的容器div:

<div *ngIf=reportsPersmissions> //Optional - see below
  <a *ngIf=isVisible(10) routerLink=".." [queryParams]="{id:'10'}">bla1</a>     
  <a *ngIf=isVisible(40) routerLink=".." [queryParams]= "{id:'20'}">bla2</a>        
</div>

这是正确的做法吗?还是有更好的方法(最佳做法)呢?

1 个答案:

答案 0 :(得分:1)

另一种选择是计算CheckModel::with('settingsval') //get all settingvalues 上的import { Client } from 'elasticsearch'; import { Injectable } from '@angular/core'; @Injectable() export class ElasticsearchService { private client: Client; queryalldocs = { 'query': { 'match_all': {} } }; constructor() { if (!this.client) { this.connect(); } } private connect() { this.client = new Client({ host: 'http://localhost:9200', log: 'trace' }); } 条件,然后将其作为变量而不是函数放在isVisible上,这可能会导致性能问题(因为它& #39;在摘要周期执行。)

NgOnInit

在您的情况下,我认为这可能会导致性能问题,但请看一下post