7

古い jQuery コードがいくつかあります。これはコードの大きな塊なので、しばらくしてから移植したいと考えています。それを使用するには、 を呼び出します$('#legacyId').legacyFunction()

ただし、これが取引です。

私はng-ifを持っています。そして、その ng-if 内に、レガシー関数を呼び出す JavaScript があります。

<div ng-if="status=='yes'">
    <div id="legacyId">
        I am a legacy div!
    </div>
    <script type="text/javascript">
        $('#legacyId').legacyFunction()
    </script>
</div>

ページの読み込み時にこの JavaScript が呼び出されているようです。jQuery の後に angular をロードしますが、Angular は ng-if の制御下にあるセクションを削除するように見えるため、jQuery 関数は#legacyId失敗します。

何か案は?ありがとう!


編集メモ: jQuery と、HTML ドキュメントの上部にある jQuery を拡張するレガシー コードをインポートします。Angular はドキュメントの下部にロードされます。


編集注 2 : も試し<div ng-init="$('#legacyId').legacyFunction()"></div>ましたが、エラーが発生します。Error: [$rootScope:inprog] $apply already in progress.

4

1 に答える 1

6

さて、これを解決することができました。

HTML では:

<div ng-if="status=='yes'">
    <div legacy-directive>
        I am a legacy div!
    </div>
</div>

私のアプリコードでは:

app.directive('legacyDirective' , function() {
   return {
        link: function(scope, element, attrs) {
            $(element).legacyFunction(scope.$eval(attrs.legacyDirective));
        }
   }
});

のおかげで、パラメータを;$(element).legacyFunction(scope.$eval(attrs.legacyDirective));に渡すこともできるようです。legacyFunction例えば<div legacy-directive='{myParameter: true}>

答えてくれてありがとう!あなたは私を正しい軌道に乗せました。

于 2013-11-06T22:55:11.030 に答える