我有一些旧版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的控制下删除了该部分,因此
#legacyId
上的jQuery函数失败。有任何想法吗?谢谢!
编辑注释:我将jQuery和用于扩展jQuery的旧代码导入HTML文档的顶部。 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
;例如<div legacy-directive='{myParameter: true}>
谢谢所有回答!你让我走上了正确的轨道。
关于angularjs - 在ng-if中调用Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19824121/