iframe - What happens when removing an object used by a ngRepeat in AngularJS? -
edit: jsfiddle example here.
i have ngrepeat spawns directives containing iframes.
div(ng-repeat='element in elements') ng-switch(on="element.type") a-directive(ng-switch-when="something") another-directive(ng-switch-when="somethingelse") now, inside directive loading content iframe after event, doing:
$iframe[0].contentwindow.d_contents = "html" $iframe[0].src = 'javascript:window["d_contents"]' everything works nicely.
when remove 1 of these elements model (in controller) like:
elements.remove(object) //using sugarjs, that's not issue, same behaviour splice the ui gets updated accordingly, i.e. element disappear.
the problem
this works expected:
elements.push(ele1) elements.push(ele2) .. init iframes inside ele1 , ele2 content .. elements.remove(ele2) result: ele2 disappears ui, ele1 still there iframe loaded
this not:
elements.push(ele1) elements.push(ele2) .. init iframes inside ele1 , ele2 content .. elements.remove(ele1) result: ele1 disappears ui, ele2 still there iframe, iframe content empty, , iframe.load() gets fired.
what happening here? why iframe getting reseted?
you need add loading logic inside load() reload content when dom changes.
var linkfn = function (scope, element, attrs) { init(function () { var $iframe = element.find("iframe") var refresh = function () { var doc = $iframe[0].contentwindow.document; doc.open(); doc.write(scope.ele.source); doc.close(); } $iframe.load(function () { console.log(scope.ele.id + ": loaded "); //refreshing refresh(); }); //initial loading refresh() }) } you need use doc.write() scenario or recursive loop error.
Comments
Post a Comment