J'ai créé la directive AngularJS suivante pour intégrer les vidéos youtube:
// A Simple youtube embed directive .directive('youtube', function() { return { restrict: 'EA', scope: { code:'=' }, replace: true, template: '<div style="height:400px;"><iframe style="overflow:hidden;height:100%;width:100%" width="100%" height="100%" src="http://www.youtube.com/embed/{{code}}" frameborder="0" allowfullscreen></iframe>' }; });
Lorsque je l'appelle depuis mon modèle <youtube code="r1TK_crUbBY"></youtube>
, j'obtiens l'erreur suivante:
Erreur: [interpoler $: noconcat] Erreur lors de l'interpolation: http://www.youtube.com/embed/ {{code}} L'Exploration contextuelle stricte interdit les interpolations qui concatent plusieurs expressions lorsqu'une valeur de confiance est requise. Voir http://docs.angularjs.org/api/ng . $ Sce
Je ne peux pas identifier ce qui ne va pas avec la directive dans l'expression {{code}}
.
Avec Angular 1.2, vous devez injecter $sce
service et trustAsResourceURL
la src
d'un iframe
.
Demo: http://plnkr.co/edit/0N728e9SAtXg3uBvuXKF?p=preview
.directive('youtube', function($sce) { return { restrict: 'EA', scope: { code:'=' }, replace: true, template: '<div style="height:400px;"><iframe style="overflow:hidden;height:100%;width:100%" width="100%" height="100%" src="{{url}}" frameborder="0" allowfullscreen></iframe></div>', link: function (scope) { scope.$watch('code', function (newVal) { if (newVal) { scope.url = $sce.trustAsResourceUrl("http://www.youtube.com/embed/" + newVal); } }); } }; });
Consultez également: Migrez de 1.0 à 1.2 et question connexe .