AngularJS ng-src
不适用于此小提琴中的HTML5视频元素:http://jsfiddle.net/FsHah/5/
查看视频元素,src标记正在填充正确的src uri,但视频无法播放。
这是not supported中的AngularJS,解决方法是什么?
答案 0 :(得分:46)
只需创建一个过滤器:
app.filter("trustUrl", ['$sce', function ($sce) {
return function (recordingUrl) {
return $sce.trustAsResourceUrl(recordingUrl);
};
}]);
在视图文件中:
<audio src="{{Your_URL | trustUrl}}" audioplayer controls></audio>
答案 1 :(得分:7)
目前这似乎是AngularJS中的一个错误:https://github.com/angular/angular.js/issues/1352
用<video ng-src="{{src}}" controls></video>
替换源代码似乎是目前至少将源加载到视频中的唯一方法。希望有人来解决这个问题或提供某种解决方法。
答案 2 :(得分:7)
要播放视频我只使用以下方法 有一个名为play的按钮,在按钮的ng-click中你必须写这个
var myVideo = document.getElementsByTagName('video')[0];
myVideo.src = vidURL;
myVideo.load();
myVideo.play();
在ng-repeat中使用 index 播放视频。 希望它有所帮助。
答案 3 :(得分:5)
从视频代码中删除源代码并尝试此操作..
<video controls preload=auto ng-src="{{videoURL| trustUrl}}" poster="{{thumbnailUrl}}"></video>
并在您的角度应用中创建一个像这样的过滤器
app.filter("trustUrl", function($sce) {
return function(Url) {
console.log(Url);
return $sce.trustAsResourceUrl(Url);
};
});
答案 4 :(得分:4)
我的回复是迟了几年,但这适用于仍在寻找解决方案的任何人。我遇到过同样的问题。我记得Youtube使用不同的标签 - iframe显示他们的嵌入视频。 我应用了我想要的属性并且它有效。
<iframe width="560" height="300" ng-src="{{ video }}" frameborder="0" allowfullscreen controls></iframe>
对于AngularJS的新用户,{{video}}是此页面控件中的$ scope.video变量,该变量包含视频的路径。
答案 5 :(得分:2)
解决方法
控制器中的
$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>
答案 6 :(得分:2)
这是AngularJS中的默认安全预防措施。请参阅详细信息:https://docs.angularjs.org/api/ng/service/$sce
禁用严格上下文转义&#39;你可以在你的app.js文件中定义它
angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
// Completely disable SCE. For demonstration purposes only!
// Do not use in new projects.
$sceProvider.enabled(false);
});
然而,他们不推荐。但你可以使用像这样的特定控制器:
var myAppControllers = angular.module('myAppControllers', []); ScorpAppControllers.controller('HomeCtrl', ['$scope', 'Home', function ($scope, Home) {
$scope.Home = Home.query(); }]).config(function($sceProvider) {
$sceProvider.enabled(false); });
答案 7 :(得分:1)
您可以使用ng-media模块。
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>
答案 8 :(得分:1)
我认为在将{和}元素添加到页面之后,src
属性中的角度填充是什么,因此浏览器会看到URL损坏的元素。我使用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>
这使得元素与foo
的存在联系在一起,toolStripComboBox1.SelectedIndex.ToString()
是通过AJAX调用填充的范围变量。
答案 9 :(得分:0)
只需使用vanilla js(常规javascript)即可完成此工作。 如果你正在听取像onended这样的事件,你可能想要使用$ scope重新考虑。$ apply()。
我的例子:
document.getElementById('video').src = $scope.videos[$scope.videoindex];