Estoy tratando de establecer el src
atributo de un iframe a partir de una variable y no puedo hacer que funcione ...
El marcado:
<div class="col-xs-12" ng-controller="AppCtrl">
<ul class="">
<li ng-repeat="project in projects">
<a ng-click="setProject(project.id)" href="">{{project.url}}</a>
</li>
</ul>
<iframe ng-src="{{trustSrc(currentProject.url)}}">
Something wrong...
</iframe>
</div>
controllers / app.js:
function AppCtrl ($scope) {
$scope.projects = {
1 : {
"id" : 1,
"name" : "Mela Sarkar",
"url" : "http://blabla.com",
"description" : "A professional portfolio site for McGill University professor Mela Sarkar."
},
2 : {
"id" : 2,
"name" : "Good Watching",
"url" : "http://goodwatching.com",
"description" : "Weekend experiment to help my mom decide what to watch."
}
};
$scope.setProject = function (id) {
$scope.currentProject = $scope.projects[id];
console.log( $scope.currentProject );
}
}
Con este código, nada se inserta en el src
atributo del iframe . Es solo en blanco.
Actualización 1:$sce
inyecté
la dependencia en AppCtrl y $ sce.trustUrl () ahora funciona sin generar errores. Sin embargo, devuelve lo TrustedValueHolderType
que no estoy seguro de cómo usar para insertar una URL real. Se devuelve el mismo tipo si uso $ sce.trustUrl () dentro de las llaves de interpolación en el atributo src="{{trustUrl(currentProjectUrl))}}"
o si lo hago dentro del controlador al establecer el valor de currentProjectUrl. Incluso lo probé con ambos.
Actualización 2: descubrí cómo devolver la url del TrustedUrlHolder usando .toString () pero cuando hago eso, arroja la advertencia de seguridad cuando intento pasarla al atributo src.
Actualización 3: Funciona si uso trustAsResourceUrl () en el controlador y lo paso a una variable utilizada dentro del atributo ng-src:
$scope.setProject = function (id) {
$scope.currentProject = $scope.projects[id];
$scope.currentProjectUrl = $sce.trustAsResourceUrl($scope.currentProject.url);
console.log( $scope.currentProject );
console.log( $scope.currentProjectUrl );
}
Esto parece resolver mi problema, aunque no estoy muy seguro de por qué.