gpt4 book ai didi

javascript - Angular 单页应用程序,videoJS 就绪功能仅在页面加载时触发

转载 作者:行者123 更新时间:2023-11-30 07:09:14 30 4
gpt4 key购买 nike

尝试使用 ng-view 模板让 videoJS 在 Angular Directive(指令)中工作。 Angular 路由和模板注入(inject)都工作正常。

html代码:

<div ng-view>
</div>

模板代码:

<div ng-controller="VideoCntrl">
<div class="row offset2" >
<video id='myVideo' videodir controls class="video-js vjs-default-skin" >
<source src="{{video.videoURL}}" type="video/mp4" />
</video>
</div>
</div>

指令代码

    app.directive('videodir',function(){
var linkFn;

linkFn = function (scope, element, attrs){
videojs("myVideo",{"techOrder": ["html5","flash"]},function(){
this.src({type: "video/mp4", src: scope.video.videoURL});
console.log(scope.video.videoURL);
});
console.log('linkfn');
};

return {
restrict: 'A',
link: linkFn
}
});

指令 videodir 中的 videojs 就绪函数仅在第一次点击页面或我重新加载页面时触发。我第一次访问我的页面时,我在控制台日志中看到来自 scope.video.videoURL 的视频 url,并且 DOM 使用的是 videoJS。如果我单击导航链接以加载不同的模板然后返回,videojs 就绪功能不会触发(即我没有在控制台日志中看到我的 videoURL 并且 DOM 没有被 videoJS 更改。我看到'linkFn ' 每次加载模板代码时在控制台中。我假设在我正在执行 console.log('linkFn') 的指令中有一些初始化代码我可以调用 videojs("myVideo") 对象,以便它操作DOM 正确,但我不知道那可能是什么。

非常感谢任何帮助。

最佳答案

当您在单页应用程序中使用带 Angular videoJs 时,您需要在范围被销毁时手动销毁 videojs 播放器(当您离开播放器的创建状态时),并在创建时重新加载它再次。

就绪状态不会再次触发,因为当您返回时,videojs 播放器在技术上已经创建,只是您的 $scope 无法跟踪它。

与其在 DOM 中定义播放器源,不如动态创建 videojs 对象

有用的链接

(动态创建播放器)

https://github.com/videojs/video.js/blob/stable/docs/guides/setup.md#alternative-setup-for-dynamically-loaded-html

(在 Angular Directive(指令)中配置播放器)

https://github.com/videojs/video.js/issues/808

DOM

<video id='myVideo' videodir controls class="video-js vjs-default-skin" ></video>

Controller

var setupOpt = {
'controls' : false,
'autoplay' : false,
'preload' : 'auto',
// 'poster' : asset.thumbnail,
'width' : 'auto',
'height': 'auto'
};

//inject $sce to use any url, or fetch url from http request
var vidSrc = $sce.trustAsResourceUrl("example.mp4");

//create video js player dynamically
videojs( 'myVideo', setupOpt, function(){
$scope.vid = videojs( 'myVideo' ).src([ {type: "video/mp4", src: vidSrc} ]);
});

//destroy video when $scope is destroyed
$scope.$on( '$destroy', function() {
console.log( 'destroying video player' );
$scope.vid.dispose();
});

关于javascript - Angular 单页应用程序,videoJS 就绪功能仅在页面加载时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18751314/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com