一尘不染

ng-click在动态DOM AngularJS上不起作用?

angularjs

我有一个像这样的控制器:

@VariantModalCtrl = ($scope) ->
  $scope.upload_variant_image = ->
    alert("test")

当我尝试使用ng-click调用upload_variant_image函数时,它仅在绑定到静态DOM时才有效(当DOM加载时),我有这样的链接:

<%= link_to "test", "" , "ng-click" => "upload_variant_image()" %>

但是此元素是在DOM加载后动态添加的,因此ng-click不起作用。

但是当我在Rails中像这样更新DOM时,它不起作用:

$(".modal-body").html($compile("<%= j render("/variants/form", :variant => @variant) %>")(scope));

阅读 221

收藏
2020-07-04

共1个答案

一尘不染

我警告您,如果您通过Angular外部方法来操纵DOM,则可能不会完全接受Angular哲学。使用AngularJS动态添加链接就像其他任何事情一样简单,并且可能比使外部库更好地发挥作用要容易得多,而且更加惯用。这是一个基于您的问题的简单示例:

<ul>
  <li ng-repeat="item in items">
    <a ng-click="upload_variant_image()">{{item.name}}</a>
  </li>
</ul>

您需要做的就是适当地合并作用域数据,这将始终“有效”。

就是说,如果您要操作DOM,则可以使用$ compile
service
导致AngularJS绑定发生(例如,根据需要单击ng-click)。不过,请考虑上述更好的选择。:)

2020-07-04