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失败。

有任何想法吗?谢谢!


编辑说明:我在 HTML 文档的顶部导入 jQuery 和扩展 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 回答