在 ng-if 中调用 Javascript

2024-01-18

我有一些遗留的 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 fails.

有任何想法吗?谢谢!


编辑注释:我在 HTML 文档顶部导入 jQuery 和扩展 jQuery 的遗留代码。 Angular 加载在文档的底部。


编辑注释2: 我也试过了<div ng-init="$('#legacyId').legacyFunction()"></div>,但我收到一个错误,Error: [$rootScope:inprog] $apply already in progress.


好的,设法解决了这个问题。

在 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; e.g. <div legacy-directive='{myParameter: true}>

谢谢所有回答的人!你让我走上了正确的道路。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ng-if 中调用 Javascript 的相关文章