如何在分配给组件内部变量的HTML代码中绑定事件?

时间:2018-12-13 18:50:34

标签: angular

component.ts中具有以下语法:

createMap() {
   `const content =` `<div class="text-center">
      <div class="col">
        <p (click)="${open()}">Open</p>
      </div>
    </div>`
}

open() {};

语法已分配给变量,而变量在Leaflet中使用。我在同一组件中有open()方法。但是该方法在页面加载时运行,并且不适用于click。

我也尝试了open()而不使用${}的情况,但是该方法被认为是字符串-没有引用。

2 个答案:

答案 0 :(得分:1)

以下代码行:<p (click)="${open()}">Open</p>正在构建字符串。 ${open()}是将执行的代码结果插入字符串的语法。

因此,它运行代码open(),然后将该函数调用的结果插入字符串中。

我不熟悉angular的语法,也不希望您将事件侦听器添加到元素。但是我可以向您保证,这不是吗。您需要引用函数的名称,或者需要JavaScript的内联字符串来执行,其中angular要么为您提供一些特殊的组件闭包,要么类似的东西。意思是,不使用Angular ,您会这样做:

对功能的实际引用:

myParagraphElement.addEventListener('click', open.bind(this))

[OR]

要执行的javascript文本行:

<p onClick="open()">Click Me</p> // Where open was on the window

我假设您与(click)一起使用的角度语法应该是像<p (click)="open()">Click</p>一样执行的javascript文本行,并且角度将假定该方法位于类中或“角度组件”。但是我猜测这仅适用于您使用的任何“模板” HTML,而不是仅生成字符串。但是,如果看不到您的所有代码,我将无法猜测。

答案 1 :(得分:0)

将事件绑定到这样的方法:

<p (click)="open()">Open</p>

,如果要提取事件,请使用open($event)