我有一些遗留的 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(使用前将#替换为@)