首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用多个元素的fromEvent (角rxjs)?

如何使用多个元素的fromEvent (角rxjs)?
EN

Stack Overflow用户
提问于 2021-07-08 12:06:21
回答 2查看 1K关注 0票数 1

我有一个有多个按钮的角应用程序,它有特定的ID。它们中的每一个都有一个单击函数,我希望跟踪用户是否单击了Button,而没有在每个方法中更改任何内容。

示例代码:

代码语言:javascript
复制
  import { Component, ViewChild, ElementRef } from '@angular/core';
import { Observable } from 'rxjs';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  
  
  

    @ViewChild('BUTTON_EDIT', {read: ElementRef}) BUTTON_EDIT;
      @ViewChild('BUTTON_ADD', {read: ElementRef}) BUTTON_ADD;
      ele: Element;
      
      ngAfterViewInit(): void {
        let clickStream;
    
        //check which element was pressed and get the id
        //how can i check it?

        clickStream = fromEvent(this.ele, 'clicked');
        var id = this.ele.id;
    
        clickStream.subscribe(event => {
          //send info
        });
      }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-08 12:25:39

角允许您将多个方法绑定到单击事件。这意味着您可以绑定一个常用的"click“方法,该方法接受元素的ID,并且不修改特定于该按钮的事件处理程序方法,如下所示:

代码语言:javascript
复制
<button id="add-btn" #addBtn (click)="click(addBtn.id); add()">
  Add
</button>

<button id="edit-btn" #editBtn (click)="click(editBtn.id); edit()">
  Edit
</button>

click方法跟踪所有按钮单击,而addedit方法是特定于每个按钮的事件处理程序。

StackBlitz实例

票数 2
EN

Stack Overflow用户

发布于 2021-07-08 12:11:53

为了侦听多个事件,可以使用合并,其中

将多个可观测数据转化为单个可观测到的

代码语言:javascript
复制
ngAfterViewInit(): void {
    merge(
        fromEvent(this.BUTTON_EDIT.nativeElement, 'click'),
        fromEvent(this.BUTTON_ADD.nativeElement, 'click'),
    ).subscribe((event: Event)=> {
      console.log(event.target.id);
    });
  }

还有一篇文章-- 使用角中的FromEvent创建可观察事件,它解释细节。

Web中的事件

对于发出的事件,有目标属性,您可以从其中获取元素的id,有一个https://jsfiddle.net/a907jf5g/

角度接近聆听单击事件

代码语言:javascript
复制
@Component({
  template: `
    <button (click)="add()">Add</button>
    <button (click)="edit()">Edit</button>
  `,
})
export class MyComponent {
  add() {
    // add clicked
  }

  edit() {
    // edit clicked
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68301315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档