iFrame上的Angular,onLoad函数

Jer*_*sia 46 iframe angularjs

我有这个iframe使用基本的JavaScript:

<iframe id="upload_iframe" name="upload_iframe" onLoad="uploadDone();"></iframe>
Run Code Online (Sandbox Code Playgroud)

uploadDone();在加载iframe的内容时触发该方法.

我如何在Angular中做同样的事情?我想在iframe加载时调用控制器上的函数,但ng-onload到目前为止我还没有看到过.

Mig*_*alo 113

评论一年的问题.对于有超过1个iframe的情况,我需要将"onload"事件绑定到.我做了这个方法.

指示

APP.directive('iframeOnload', [function(){
return {
    scope: {
        callBack: '&iframeOnload'
    },
    link: function(scope, element, attrs){
        element.on('load', function(){
            return scope.callBack();
        })
    }
}}])
Run Code Online (Sandbox Code Playgroud)

调节器

APP.controller('MyController', ['$scope', function($scope){

    $scope.iframeLoadedCallBack = function(){
        // do stuff
    }
}]);
Run Code Online (Sandbox Code Playgroud)

DOM

<div ng-controller="MyController">
    <iframe iframe-onload="iframeLoadedCallBack()" src="..."></iframe>
</div>
Run Code Online (Sandbox Code Playgroud)

  • Miguel,你的解决方案很棒!但是,对于复制粘贴代码的人来说,请解开destroy上的事件处理程序:`scope.$ on('$ destroy',function(){element.off('load');})` (15认同)
  • 完美,感谢这个指令。我通过以下方式更改了指令中的回调调用:`return scope.callBack(element);` 这样我就可以在我的函数中读取元素属性。 (2认同)
  • 我尝试传递元素但无法访问,是否有可以共享的小型工作演示? (2认同)

cha*_*tfl 28

尝试在控制器中定义函数:

window.uploadDone=function(){
  /* have access to $scope here*/
}
Run Code Online (Sandbox Code Playgroud)

  • 这样做的缺点是它将全局函数与Angular代码混合在一起.它有效,但可能令人困惑.例如."阅读代码的其他人是否希望在控制器中找到它?它会与其他任何东西冲突吗?" (3认同)

Hai*_*jin 22

对于任何使用 Angular 2+ 的人来说,这很简单:

<iframe (load)="uploadDone()"></iframe>
Run Code Online (Sandbox Code Playgroud)

没有全局功能,适用于多个 iframe。