从html到组件的角度条件?

Posted

技术标签:

【中文标题】从html到组件的角度条件?【英文标题】:Angular if condition from html to component? 【发布时间】:2019-04-02 11:50:01 【问题描述】:

我在 Angular 中遇到了一个非常新的问题:我想在一个表中创建多个过滤器。所以为了实现这一点,我想在输入上创建一个“if”条件,例如,如果我有一个名为“Entity”的表头,那么它将告诉我的组件类它是输入实体。

我如何做到这一点?

  public performFilter(filterBy: string): IDonnee[] 
      filterBy = filterBy.toLocaleLowerCase();
      // I'd want to put the condition here like (if input.class == "entity then.."
      if (this.isFiltered) 
        return this.filteredDonnees.filter((donnee: IDonnee) =>
          donnee.entity.toLocaleLowerCase().indexOf(filterBy) !== -1);
       else 
          return this.donnees.filter((donnee: IDonnee) =>
            donnee.entity.toLocaleLowerCase().indexOf(filterBy) !== -1);
        
  
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<table *ngIf="donnees && donnees.length">
  <th>
    Entity
    <br>
    <input size=thSize ng-model="entity" class="entity"[(ngModel)]="listFilter">
  </th>
  <th>
    bdrID
    <br>
    <input size=thSize ng-model="bdrId" class="bdrId" [(ngModel)]="listFilter2">
  </th>
</table>

例如,我想在我的 JS 代码中获取输入的类名。

抱歉,如果我没有说清楚,您可以提出任何问题并提前感谢!

【问题讨论】:

【参考方案1】:

所以,如果我理解正确,您的目标是在单击相应的 TH 元素时进行过滤?比如,在 Input 元素上调用点击事件?

如果是这种情况,您可以尝试以下方法: 为输入元素提供一个 ID: 输入 id="donnees" (click)="performFilter($event)" 对于两个 TH 元素也是如此。 出于某种奇怪的原因,它不允许我粘贴完整的表格代码。

我认为与其拥有多个数组,不如拥有一个包含所有数组的对象,这样您就可以根据从 $event 传递的 ID 进行过滤。 例如:filterObject => donnees[]、filteredDonnees[]

public performFilter(event) 
  return this.filterObject[event.target.Id].filter(// write your condition here);

如果这就是您要找的,请告诉我。

【讨论】:

你好,所以我在这个例子中有 2 列,然后当我在第一列的输入(就在下面)中写一些东西时,它会过滤它,然后当我在第二个输入,它将在使用第一个输入过滤后过滤剩余的数据。 (对不起,如果很难理解!)我会尝试你的方法,然后再回来(为我的代码调整它)谢谢!所以我并没有真正使用事件,只是在每次按下键并更改过滤器字符串时将过滤器添加到组件上 在你的例子中,我如何在没有事件的情况下访问输入的 id? 事件将是 (keyup)='performFilter($event)' 而不是点击。 好的,我要试试,我正试图理解这背后的逻辑。 filterObject 有什么用?我的意思是什么是 filterObject[event.target.id] 如果 id = entity ,这是否意味着它是一个实体数组? 与其拥有多个项目,不如拥有一个对象,这样您就可以通过传入 id 进行过滤。那只是为了更好的可读性和代码管理。可以说,如果您将来还有一个数组,则必须为该数组再添加一个“如果”条件。但是,如果您遵循此方法,您的 performFilter 对象将始终保持不变。如果您不想这样做,您仍然可以使用您拥有的方法,您可以在 if 条件中使用 Id 并执行与您相同的操作。 filterObject[event.target.id] => 如果 Id 是 donnees 它将过滤对象 donnees

以上是关于从html到组件的角度条件?的主要内容,如果未能解决你的问题,请参考以下文章

将变量从商店绑定到角度ngrx中的组件

接收到 websocket 消息后,如何从组件 **ts** 文件中重新呈现角度组件视图?

如何将一些字符串或数据从 API 传递到角度 6 中的角度组件?

从角度4中的html中删除主机组件标签

条件角度组件提供者

角度示意图条件属性/提示