Подтвердить что ты не робот

ng-click не работает на динамическом DOM AngularJS?

У меня такой контроллер:

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

Когда я пытаюсь вызвать функцию upload_variant_image с помощью ng-click, он работает только при привязке к статическому DOM (при загрузке DOM), у меня есть ссылка вроде этого:

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

но этот элемент динамически добавляется после загрузки DOM, поэтому ng-click не работает.

Обновление Просто нашел часть моего ответа, используя функцию компиляции: AngularJS + JQuery: как заставить динамический контент работать в angularjs

НО это не работает, когда я обновляю DOM, как это в Rails:

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

Ответ 1

Я предупреждал бы вас, что вы не можете полностью придерживаться философии Angular, если вы манипулируете DOM через Angular -external. Динамическое добавление ссылок с помощью AngularJS так же просто, как и все остальное, и, вероятно, будет намного проще и более идиоматично, чем заставить вашу внешнюю библиотеку играть красиво. Вот простой пример, основанный на вашем вопросе:

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

Все, что вам нужно сделать, это подключить данные области соответствующим образом, и это всегда будет "просто работать".

Тем не менее, если вы манипулируете DOM, вы можете вызвать привязки AngularJS (к примеру, ng-click по вашему желанию) с помощью $compile service. Однако учтите, что это лучший вариант.:)