10

次のようなコントローラーがあります。

@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 は機能しません。

更新 $compile 関数を使用して私の回答の一部を見つけました: AngularJS + JQuery : How to get dynamic content working in angularjs

しかし、Rails で次のように DOM を更新すると機能しません。

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

1 に答える 1

15

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 を実行します) 。ただし、上記のより良いオプションを検討してください。:)

于 2013-04-30T09:33:05.803 に答える