【问题标题】:Dynamic binding of ng-click?ng-click的动态绑定?
【发布时间】:2013-08-24 05:24:29
【问题描述】:

当用户执行某个操作时,我会在 contenteditable 字段的文本中插入一个链接:

var newElement = document.createElement('span');
newElement.innerHTML = "<a id='123' class='cite' href='' data-ng-click='review(123);'>[&#8225;]</span>";
range.insertNode(newElement);
$compile($(newElement).contents())($scope);

当用户点击新字段时,我想执行activate控制器的review方法。 ($scope.review = function(id) {...};)

页面导航到“#”,而不调用 review();

我假设 click 方法不会通过调用 range.insertNode(newElement); 来“绑定”到 $scope.review(); ?我尝试使用 $apply 进行包装,但没有成功。

【问题讨论】:

  • 尝试用 javascript:void(0) 替换 #
  • 我不关心如何停止默认行为,问题是如何让它在添加元素(因此 ng-click)时执行控制器中定义的 review() 方法'在飞行中'

标签: angularjs


【解决方案1】:

在 Angular 中使用 href="" 而不是 href="#"。如果 href 为空,则始终阻止默认操作。 http://docs.angularjs.org/api/ng.directive:a

还要确保$compile 那个元素。理想情况下,ng-repeat 就是这种情况,如果您所做的实际上是制作一个元素列表。

【讨论】:

  • 好的,更改了 href="" 并添加了编译步骤(上面已编辑)但仍然没有点击操作
  • 哦,ng-repeat 不是一个因素,因为这些元素是稀疏的,并且不重复(我在可编辑的 DIV 中添加一个跨度以指示脚注)
  • 您是否尝试过只使用$compile($(newElement))($scope);,而不使用.contents()$compile(newElement)($scope); 可能也足够了。
  • 好的,这确实有效,只是我的范围有误。 $compile($(newElement).contents())($scope);是我需要的,谢谢!
【解决方案2】:

在您的模板代码中,您可以完全删除 href 属性。如果您希望它导航,请将其包含在 ng-click 表达式中。

【讨论】:

    【解决方案3】:

    元素中根本不需要 href 标记,ng-click 就可以工作。如果您希望指针在悬停时更改,可以使用内联样式或 css。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-01
      • 2013-10-19
      • 1970-01-01
      • 2015-06-21
      • 2016-06-16
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多