<i id='mK1sj'><tr id='mK1sj'><dt id='mK1sj'><q id='mK1sj'><span id='mK1sj'><b id='mK1sj'><form id='mK1sj'><ins id='mK1sj'></ins><ul id='mK1sj'></ul><sub id='mK1sj'></sub></form><legend id='mK1sj'></legend><bdo id='mK1sj'><pre id='mK1sj'><center id='mK1sj'></center></pre></bdo></b><th id='mK1sj'></th></span></q></dt></tr></i><div id='mK1sj'><tfoot id='mK1sj'></tfoot><dl id='mK1sj'><fieldset id='mK1sj'></fieldset></dl></div>
      • <bdo id='mK1sj'></bdo><ul id='mK1sj'></ul>

        <legend id='mK1sj'><style id='mK1sj'><dir id='mK1sj'><q id='mK1sj'></q></dir></style></legend>
      1. <small id='mK1sj'></small><noframes id='mK1sj'>

        <tfoot id='mK1sj'></tfoot>
      2. Angular2指令修改点击处理

        时间:2023-09-07
          <tbody id='P3F9z'></tbody>
        • <small id='P3F9z'></small><noframes id='P3F9z'>

          <legend id='P3F9z'><style id='P3F9z'><dir id='P3F9z'><q id='P3F9z'></q></dir></style></legend>

              <bdo id='P3F9z'></bdo><ul id='P3F9z'></ul>
              <tfoot id='P3F9z'></tfoot>

            • <i id='P3F9z'><tr id='P3F9z'><dt id='P3F9z'><q id='P3F9z'><span id='P3F9z'><b id='P3F9z'><form id='P3F9z'><ins id='P3F9z'></ins><ul id='P3F9z'></ul><sub id='P3F9z'></sub></form><legend id='P3F9z'></legend><bdo id='P3F9z'><pre id='P3F9z'><center id='P3F9z'></center></pre></bdo></b><th id='P3F9z'></th></span></q></dt></tr></i><div id='P3F9z'><tfoot id='P3F9z'></tfoot><dl id='P3F9z'><fieldset id='P3F9z'></fieldset></dl></div>
                  本文介绍了Angular2指令修改点击处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我正在尝试编写一个 Angular2 属性指令来修改某些元素的行为.更具体地说,我想将属性应用于具有点击处理程序的某些元素,并防止绑定函数在某些条件下执行.

                  I am trying to write a Angular2 attribute directive to modify the behaviour of certain elements. More specifically I want to apply an attribute to certain elements that have click handlers and prevent the bound function to be executed under certain conditions.

                  所以现在我有一个元素,例如:

                  So now I have an element e.g.:

                  <button (click)="onClick(param1, param2)"></button>
                  

                  onClick 是在承载按钮元素的组件上声明的函数.

                  onClick is a function declared on the component that hosts the button element doing some work.

                  我想做的是这样写:

                  <button (click)="onClick(param1, param2)" online-only></button>
                  

                  并有一个类似的指令:

                  @Directive({
                    selector: '[online-only]',
                  })
                  export class OnlineOnlyDirective {
                    @HostListener('click', ['$event']) 
                    onClick(e) {
                      if(someCondition){
                        e.preventDefault();
                        e.stopPropagation();
                      }
                    }
                  }
                  

                  但是单击处理程序首先执行,因此我的指令没有机会停止执行.

                  But click handler is executed first, thus not giving my directive the opportunity to stop its execution.

                  我想到的第二种方法是用我自己的处理程序替换(单击),例如([onlineClick]="onClick")并在指令认为合适时执行传递的函数,但是这样我不能将参数传递给 onClick 函数和看起来有点奇怪.

                  A second approach I thought about was replacing (click) with my own handler e.g.( [onlineClick]="onClick" ) and execute the passed function when the directive thinks fit, but this way I cannot pass params to onClick function and is a bit weirder to look at.

                  你对做这样的事情有什么想法吗?

                  Do you have any thoughts on doing something like that?

                  推荐答案

                  我不知道有什么方法可以强制 Angular 先执行某个事件处理程序.一种解决方法可能是使用自定义事件,例如:

                  I don't know of a way to force Angular to execute a certain event handler first. A workaround might be to use a custom event like:

                  <button (myClick)="onClick(param1, param2)" online-only></button>
                  

                  @Directive({
                    selector: '[myClick]',
                  })
                  export class OnlineOnlyDirective {
                    @Output() myClick: EventEmitter = new EventEmitter();
                    @HostListener('click', ['$event']) 
                    onClick(e) {
                      if(someCondition){
                        e.preventDefault();
                        e.stopPropagation();
                      } else {
                        this.myClick.next(e);
                      }
                    }
                  }
                  

                  这篇关于Angular2指令修改点击处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何从 Ionic 2 中的后退按钮更改标签? 下一篇:Angular 2 Ionic 2 - 如何将最大或最小日期设置为今天

                  相关文章

                  最新文章

                    <tfoot id='XBPo9'></tfoot>

                    <legend id='XBPo9'><style id='XBPo9'><dir id='XBPo9'><q id='XBPo9'></q></dir></style></legend>
                  1. <small id='XBPo9'></small><noframes id='XBPo9'>

                    <i id='XBPo9'><tr id='XBPo9'><dt id='XBPo9'><q id='XBPo9'><span id='XBPo9'><b id='XBPo9'><form id='XBPo9'><ins id='XBPo9'></ins><ul id='XBPo9'></ul><sub id='XBPo9'></sub></form><legend id='XBPo9'></legend><bdo id='XBPo9'><pre id='XBPo9'><center id='XBPo9'></center></pre></bdo></b><th id='XBPo9'></th></span></q></dt></tr></i><div id='XBPo9'><tfoot id='XBPo9'></tfoot><dl id='XBPo9'><fieldset id='XBPo9'></fieldset></dl></div>
                    • <bdo id='XBPo9'></bdo><ul id='XBPo9'></ul>