Refreshing iframe contents in AngularJS Refreshing iframe contents in AngularJS angularjs angularjs

Refreshing iframe contents in AngularJS


As Paulo Scardine said, the right way to do it would be through a directive cause you shouldn't use controllers to manipulate DOM.

Something like this one could do :

.directive('refreshable', [function () {    return {        restrict: 'A',        scope: {            refresh: "=refreshable"        },        link: function (scope, element, attr) {            var refreshMe = function () {                element.attr('src', element.attr('src'));            };            scope.$watch('refresh', function (newVal, oldVal) {                if (scope.refresh) {                    scope.refresh = false;                    refreshMe();                }            });        }    };}])

Which could then be used like :

<iframe refreshable="tab.refresh"></iframe>

And :

$scope.refreshIframe = function(){    $scope.tab.refresh = true;}


Another hack-ish solution: if you don't want to create a directive but want to stick to the good practices of not manipulating the DOM in controller.Keep the url in an array and use ng-repeat to render the iFrame:View:

<iframe ng-repeat="url in vm.url" ng-src="{{url}}" />

Controller:

vm.url = ['http://google.com'];

So, every time you set the value of the vm.url, angular will re-render the iFrame.


Solved it by a hack suggested in Reload an iframe with jQuery

$scope.refreshIframe = function() {     var iFrame = $document.find("anIframe");    iFrame.attr("src",iFrame.attr("src"));};