Próbuję ustawić src
atrybut iframe ze zmiennej i nie mogę go uruchomić ...
Znaczniki:
<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>
kontrolery / 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 );
}
}
Dzięki temu kodowi nic nie jest wstawiane do src
atrybutu iframe . To jest po prostu puste.
Aktualizacja 1:
wstrzyknąłem $sce
zależność do AppCtrl i $ sce.trustUrl () działa teraz bez zgłaszania błędów. Zwraca jednak informacje, TrustedValueHolderType
których nie jestem pewien, jak wstawić rzeczywisty adres URL. Ten sam typ jest zwracany bez względu na to, czy używam $ sce.trustUrl () wewnątrz nawiasów interpolacyjnych w atrybucie, src="{{trustUrl(currentProjectUrl))}}"
czy robię to wewnątrz kontrolera podczas ustawiania wartości currentProjectUrl. Próbowałem nawet z obydwoma.
Aktualizacja 2: Zorientowałem się, jak zwrócić adres URL z zaufanegoUrlHolder za pomocą .toString (), ale kiedy to robię, wyświetla ostrzeżenie bezpieczeństwa, gdy próbuję przekazać go do atrybutu src.
Aktualizacja 3: Działa, jeśli użyję trustAsResourceUrl () w kontrolerze i przekażę to do zmiennej używanej w atrybucie 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 );
}
Wydaje się, że mój problem został przez to rozwiązany, chociaż nie jestem do końca pewien, dlaczego.