2014-11-18 8 views
10

Za pomocą AngularJS, próbuję załadować adres URL "myLink" do elementu iframe w innym html. data.No jest identyfikator że wyciągnę z innego miejsca i działa prawidłowo (uzyskać identyfikator że muszę do URL)Nie można załadować adresu URL do elementu iframe za pomocą metody AngularJS

w sterowniku - „TransactionsCtrl”:

$scope.myLink = "http://"the real url"+ data.No +"&file="+ data.No +"&contract_id="+ data.No; 
console.log($scope.myLink); 

w HTML:

<div ng-controller= "TransactionsCtrl"> 
    <iframe ng-src="{{myLink}}"></iframe> 
</div> 

i wszystko mi się to:

Error: [$interpolate:interr] Can't interpolate: {{myLink}} 
Error: [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy. URL 

kiedy ciężko zakodowany url działa dobrze.

Odpowiedz

21

W regulatorze należy użyć:

$scope.myLink = $sce.trustAsResourceUrl(myUrl) 
+0

To jest dobre, jeśli masz jeden adres URL lub zestawu adresów URL .. Nie tak dobre, jeśli trzeba przekazać je w dynamicznie musisz ustawić je w kontrolerze, zamiast przekazywać jako var. Chociaż jest to poprawne. Odpowiedź poniżej z saghar.fadaei jest rozwiązaniem do zastosowania. – GravyPlaya

5

To działa dla mnie: można napisać to w kodzie js jako funkcja

$scope.trustSrc = function(src) { 
    return $sce.trustAsResourceUrl(src); 
} 
$scope.iframe = {src:"http://www.youtube.com/embed/Lx7ycjC8qjE"}; 

i używać go w widoku:

<iframe ng-src="{{trustSrc(iframe.src)}}"></iframe> 

lub możesz napisać jako filtr, taki jak:

.filter('trusted', function($sce){ 
return function(url) { 
    return $sce.trustAsResourceUrl(url); 
}; 

})

i używać go w widoku:

<iframe ng-src="{{iframe.src | trusted}}"></iframe> 
Powiązane problemy