AngularJS ng-src
ne fonctionne pas avec l'élément vidéo HTML5 dans ce violon: http://jsfiddle.net/FsHah/5/
En regardant l'élément video, la balise src est remplie avec l'URI src correct, mais la vidéo ne joue pas.
Est-ce non supporté dans AngularJS , quelle est la solution de contournement pour cela?
Il suffit de créer un filtre:
app.filter("trustUrl", ['$sce', function ($sce) {
return function (recordingUrl) {
return $sce.trustAsResourceUrl(recordingUrl);
};
}]);
Dans le fichier de vue:
<audio src="{{Your_URL | trustUrl}}" audioplayer controls></audio>
Cela ressemble actuellement à un bug dans AngularJS: https://github.com/angular/angular.js/issues/1352
Remplacer la source par <video ng-src="{{src}}" controls></video>
semble être le seul moyen pour le moment de charger au moins une source dans la vidéo. Espérons que quelqu'un vienne résoudre ce problème ou fournisse une solution de contournement.
Pour lire la vidéo, je viens d'utiliser la méthode suivante Avoir un bouton appelé jouer et dans le ng-clic du bouton, vous devez écrire ceci
var myVideo = document.getElementsByTagName('video')[0];
myVideo.src = vidURL;
myVideo.load();
myVideo.play();
pour lire une vidéo en mode répétition, utilisez index . espérons que cela vous aidera.
Supprimez la balise source de la balise video et essayez ceci.
<video controls preload=auto ng-src="{{videoURL| trustUrl}}" poster="{{thumbnailUrl}}"></video>
et dans votre application angulaire créer un filtre comme celui-ci
app.filter("trustUrl", function($sce) {
return function(Url) {
console.log(Url);
return $sce.trustAsResourceUrl(Url);
};
});
Ma réponse a quelques années de retard, mais c'est pour ceux qui cherchent encore une solution. J'ai eu le même problème. Je me suis rappelé que Youtube affiche leurs vidéos intégrées en utilisant un tag différent - iframe ..__ J'ai appliqué les propriétés que je voulais et cela a fonctionné.
<iframe width="560" height="300" ng-src="{{ video }}" frameborder="0" allowfullscreen controls></iframe>
Pour les nouveaux venus dans AngularJS, le {{video}} est une variable $ scope.video dans le contrôle de cette page qui contient le chemin d'accès à la vidéo.
Ceci est une mesure de sécurité par défaut dans AngularJS. Veuillez consulter les détails: https://docs.angularjs.org/api/ng/service/$sce
Pour désactiver la fonction 'Échappement contextuel strict', vous pouvez définir ceci dans votre fichier app.js.
angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
// Completely disable SCE. For demonstration purposes only!
// Do not use in new projects.
$sceProvider.enabled(false);
});
Cependant, ils ne recommandent pas. Mais vous pouvez utiliser pour un contrôleur spécifique comme ceci:
var myAppControllers = angular.module('myAppControllers', []); ScorpAppControllers.controller('HomeCtrl', ['$scope', 'Home', function ($scope, Home) {
$scope.Home = Home.query(); }]).config(function($sceProvider) {
$sceProvider.enabled(false); });
workaround
dans le contrôleur
$scope.mp3 = "http://download.jw.org/audio.mp3"
$scope.$watch('mp3', function() {
$("audio").attr("src",$scope.mp3)
});
html:
<audio id="mejs" type="audio/mp3" controls="controls"></audio>
Vous pouvez utiliser ng-media module.
angular.module('app', ['media'])
.controller('mainCtrl', function($scope) {
$scope.videoSources = [];
$scope.loadVideos = function() {
$scope.videoSources.Push('http://www.w3schools.com/html/mov_bbb.mp4');
$scope.videoSources.Push('http://www.w3schools.com/html/mov_bbb.webm');
};
});
<div ng-app='app'>
<div ng-controller='mainCtrl'>
<video html5-video='{{ videoSources }}'
autoplay='true' controls='true'>
</video>
<br>
<a href="#" ng-click='loadVideos()'>Load videos</a>
</div>
</div>
<script src="https://code.angularjs.org/1.3.15/angular.js"></script>
<script src="http://caitp.github.io/ng-media/ng-media.js"></script>
Plunker .
Je pense que ce qui se passe est que Angular remplit les attributs src
après que les éléments et aient été ajoutés à la page, de sorte que le navigateur voit les éléments avec des URL cassées. J'ai travaillé dessus en utilisant ng-if
:
<video muted ng-if="foo" loop autoplay>
<source ng-src="{{foo.media.mp4.url}}">
<source ng-src="{{foo.media.webm.url}}" type="video/webm">
<img ng-src="{{foo.media.gif.url}}">
</video>
Cela rend l'élément lié à l'existence de foo
, qui est une variable de portée renseignée via l'appel AJAX.
Utilisez simplement Vanilla js (javascript classique) pour que cela fonctionne . Si vous écoutez des événements comme ceux-ci, vous voudrez peut-être reconsidérer l’utilisation de $ scope. $ Apply ().
Mon exemple:
document.getElementById('video').src = $scope.videos[$scope.videoindex];