【问题标题】:AngularJS - ngInclude does not render expressions in eventsAngularJS - ngInclude 不在事件中呈现表达式
【发布时间】:2014-12-27 12:41:00
【问题描述】:

我在尝试使用 AngularJS 中的指令渲染另一个 HTML 时遇到问题。

如果模板 HTML 没有事件,它工作得很好:

<button id="{{item.id}}">Some Button !</button>

将被渲染为:

<button id="123">Some Button !</button>

但如果模板 HTML 有一些事件,角度表达式将不起作用:

<button id="{{item.id}}" onmouseover="doSomething({{item.id}})">Some Button !</button>

将被渲染为:

<button id="123" onmouseover="doSomething({{item.id}}">Some Button !</button>

我尝试导入另一个 HTML 并使用 Directives 和 ngInclude 动态更改内容,但是当它们尝试包含模板 HTML 时,它们的反应方式相同。

这个问题只发生在事件(onfocus、onmouseover、onclick)并且html的任何其他部分都被成功渲染。

我想导入一个 HTML,并且我想用数据完全替换表达式。这样做的原因之一是我们有很多自定义的 JSP 标签库,我们希望将它们转换为 AngularJS 指令。在这些标签中有很多事件,例如我们自己的自定义“自动完成”标签有超过 10 个事件,只有当 angular 将我们的表达式呈现在这些事件中时,它们才能轻松转换为指令(但它不是!)

谢谢

【问题讨论】:

  • 你真的应该使用像ng-mouseover这样的角度等效项。还有这个 jQuery 选择器在属性中的意图是什么?这真的不是做它的角度方式,你将很难做到这一点......
  • 你是对的......我应该使用角度等价物......但我已经在另一个 JS 文件中编写了像“doSomething()”这样的函数,它们不在我的范围内...... 。 我应该怎么办 ?重写所有这些以在 Angular 中工作?我不能以某种方式让它们像上面的例子一样工作吗?顺便说一句,我删除了 jQuery 选择器...谢谢提及...
  • 改用doSomething(item.id),但如果函数不在作用域内,它将无法工作...如果函数是全局的,您可以尝试$window.doSomething(item.id)。而且我认为没有什么可以阻止您使用ng-mouseover

标签: angularjs angularjs-directive angularjs-ng-include


【解决方案1】:

角度鼠标悬停的正确语法是:

<button id="{{item.id}}" ng-mouseover="doSomething(item.id)">Some Button !</button>

这段代码意味着您已经定义了$scope.doSomething(),并且您正在使用例如ng-repeat="item in myArrayOrObject" 在页面上打印此按钮。

更多详情请查看文档:https://docs.angularjs.org/api/ng/directive/ngMouseover

【讨论】:

  • 是的!但问题是我只想将 "doSomething({{item.id}})" 替换为 "doSomething(123)" !我包含了另一个 HTML,但我希望其中的所有角度表达式都被真实数据替换,最后不会留下其他表达式......这甚至可能还是无论如何,我必须坚持使用“ng-鼠标悬停”?
  • @Cypher 我不认为它可以使用 onmouseover="" afaik 你需要 ng-mouseover="" 这与 onmouseover="" 完全相同,你试过了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多