Créer une directive YouTube AngularJS

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 .