【问题标题】:How to bind an event in the HTML code assigned to a variable inside component?如何绑定分配给组件内部变量的 HTML 代码中的事件?
【发布时间】:2018-12-13 18:50:33
【问题描述】:

我在component.ts中有如下语法:

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

open() {};

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

我也尝试了open() 没有${},但该方法被视为字符串 - 没有参考。

【问题讨论】:

  • 打开

  • @jakubm 我试过了。 open() 在这里被视为字符串。
  • 为什么open() 是一个字符串?你能改变它吗?您应该引用 open 方法而不是字符串。
  • @ConnorsFan 是因为它是内部方法吗?查看更新的问题。
  • 答案可能在this post(指的是this one)。动态创建 HTML 时无法绑定事件。

标签: angular


【解决方案1】:

这行代码:&lt;p (click)="${open()}"&gt;Open&lt;/p&gt; 正在构建一个字符串。而${open()}是将执行代码的结果插入到字符串中的语法。

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

我不熟悉 angular 的语法,也不熟悉如何向元素添加事件侦听器。但我可以向你保证,你在做什么不是它。您需要对函数名称的引用,或者您需要一个内联的 javascript 字符串来执行,其中 angular 为您提供一些特殊的组件闭包,或类似的东西。意思是,没有 Angular 你会这样做:

函数的实际引用:

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

[或]

要执行的javascript文本行:

&lt;p onClick="open()"&gt;Click Me&lt;/p&gt; // Where open was on the window

我假设您与(click) 一起使用的角度语法应该是像&lt;p (click)="open()"&gt;Click&lt;/p&gt; 一样执行的javascript 文本行,并且该角度会假设该方法在类上,或者关于“角度组件”到上下文。但我猜这只会在你使用的任何“模板”HTML中工作,而不是仅仅生成一个字符串。但是如果没有看到你所有的代码,我将无法猜测。

【讨论】:

  • 感谢您的解释。根据这篇文章:stackoverflow.com/q/37901436/1009922。这不可能是我想要的。
  • 您的答案应该适用于纯 JavaScript,但 Angular 不允许在 innerHTML 中使用 onClick。
  • (click) 将是非法的 HTML,所以我不会走那么远。前 2 个示例用于原生 javascript。第 3 个似乎对模板文件中的 angular 有效,但同样,作为本机字符串毫无意义。
【解决方案2】:

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

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

如果你想提取事件使用open($event)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 2010-11-16
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多