【问题标题】:How to raise an event from the elements created using BrowserDomAdapter?如何从使用 BrowserDomAdapter 创建的元素中引发事件?
【发布时间】:2016-01-25 15:32:28
【问题描述】:

我正在使用 BrowserDomAdapter 创建元素并将它们附加到视图中。我想在单击新创建的元素时引发事件。但我没有成功。我创建了一个 plunker 演示,以便有人可以帮助我http://plnkr.co/edit/VGHEPBs8oZW7HG6Ze21z?p=preview

add(){
   var a=this.dom.createElement('button');
   this.dom.setInnerHTML(a,'clickme');
   this.dom.appendChild(this.dom.query("my-app"),a);
   a.createMouseEvent('onclick');
   a.createEvent(raiseevent);
   a.onclick=raiseevent;
 }

这就是我添加元素和创建事件的方式。这是我想要在单击元素时运行的事件

raiseevent(){
   alert('hi');
 }

我想知道我在哪里做错了。请有人以正确的方式指导我

【问题讨论】:

    标签: typescript angular


    【解决方案1】:

    您可以使用BrowserDomAdapteron 方法来设置监听器。在引用类的方法和属性时,请务必使用this

    export class AppComponent {
      dom:BrowserDomAdapter;
      constructor() { 
        this.dom = new BrowserDomAdapter();
      }
      add(){
        var a=this.dom.createElement('button');
        this.dom.on(a, 'click', this.raiseevent);
        this.dom.setInnerHTML(a,'clickme');
        this.dom.appendChild(this.dom.query("my-app"),a);
      }
      raiseevent(){
        alert('hi');
      }
    }
    

    【讨论】:

    • 哇...非常简单。我认为我们应该使用 a.Createevent 创建事件但无法获得它...非常感谢兄弟
    • 但是我怎样才能将参数传递给它呢?如果我编写类似这样的代码-> this.dom.on(a,'click',this.raiseevent('hello'));该功能仅在开始时执行...我该如何解决?
    • 您可以使用 bind 将参数绑定到它。 this.dom.on(a, 'click', this.raiseevent.bind(this, 'hello'));
    • 非常感谢兄弟
    • 对不起兄弟,我一直在打扰你...有没有办法可以将 localtemplate 变量设置为创建的元素。因为我希望创建的元素应该有一个 localtemplate 变量。我可以设置 id 因为它是一个属性但不是 localtemplate 变量...
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多