Ich versuche, das src
Attribut eines Iframes aus einer Variablen festzulegen, und ich kann es nicht zum Laufen bringen ...
Das Markup:
<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>
controller / 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 );
}
}
Mit diesem Code wird nichts in das src
Attribut des Iframes eingefügt . Es ist nur leer.
Update 1:
Ich habe $sce
die Abhängigkeit in AppCtrl eingefügt und $ sce.trustUrl () funktioniert jetzt ohne Fehler. Es wird jedoch zurückgegeben, TrustedValueHolderType
was ich nicht sicher bin, wie ich eine tatsächliche URL einfügen soll. Der gleiche Typ wird zurückgegeben, unabhängig davon, ob ich $ sce.trustUrl () in den Interpolationsklammern im Attribut verwende src="{{trustUrl(currentProjectUrl))}}"
oder ob ich dies innerhalb des Controllers mache, wenn ich den Wert von currentProjectUrl setze. Ich habe es sogar mit beiden versucht.
Update 2: Ich habe herausgefunden, wie die URL mit .toString () vom TrustedUrlHolder zurückgegeben werden kann. Dabei wird jedoch die Sicherheitswarnung ausgegeben, wenn ich versuche, sie an das src-Attribut zu übergeben.
Update 3: Es funktioniert, wenn ich trustAsResourceUrl () im Controller verwende und dies an eine Variable übergebe, die im Attribut ng-src verwendet wird:
$scope.setProject = function (id) {
$scope.currentProject = $scope.projects[id];
$scope.currentProjectUrl = $sce.trustAsResourceUrl($scope.currentProject.url);
console.log( $scope.currentProject );
console.log( $scope.currentProjectUrl );
}
Mein Problem scheint dadurch gelöst zu sein, obwohl ich nicht ganz sicher bin, warum.