gpt4 book ai didi

javascript - 在 Angular 中更改页面时,如何修复 yyyy 不是一个函数?

转载 作者:行者123 更新时间:2023-11-28 05:06:27 25 4
gpt4 key购买 nike

我有一个 Angular 应用程序,它使用 Videojs 插件在视频上添加标记。一切正常,除了从一个页面转到另一个页面时,我收到错误:player.markers 不是一个函数。仅当我刷新页面时它才会再次工作。

为了更好地解释,当我第一次进入网页时,或者如果页面已经打开并刷新它,那么一切正常。但是,如果我转到第 2 页,我会收到 player.markers is not a function 错误。另外,如果我刷新页面,它会再次工作。

我知道修复起来应该很简单,从一个页面转到另一个页面时插件未加载的地方,但我找不到解决方案。

这是我的代码:

Controller :

// ********  CONTROLLER 1 *********
app.controller('topicCtrl', function($scope, $routeParams, $http) {
//bookmarks list. here is also data about markers on video progress bar
$scope.markers = [
{
time: 9.5,
text: "Compare Balance",
overlayText: 'overlay'
},
{
time: 106,
text: "xRay Rules",
overlayText: 'overlay'
},
{
time: 43.6,
text: "Rule filter0-text",
overlayText: 'overlay'
},
{
time: 78,
text: "Using help-id class",
overlayText: 'overlay'
}];

//video player object
var player = videojs('myVideo');

//load the marker plugin
//!!! HERE IS WHERE I GET THE ERROR. player.markers not a function
player.markers({
markers: $scope.markers,
markerStyle: {
'width': '17px',
'border-radius': '30%',
'background-color': 'green'
},
markerTip:{
display: true,
text: function(marker) {
return marker.text;
},
time: function(marker) {
return marker.time;
}
},
onMarkerClick: function(marker) {}
});
});

// ******** CONTROLLER 2 *********
app.controller('devCtrl', function ($scope, $routeParams, $http, $window) {

//bookmarks list. here is also data about markers on video progress bar
$scope.markers = [
{
time: 9.5,
text: "Compare Balance",
overlayText: 'overlay'
},
{
time: 106,
text: "xRay Rules",
overlayText: 'overlay'
},
{
time: 43.6,
text: "Rule filter0-text",
overlayText: 'overlay'
},
{
time: 78,
text: "Using help-id class",
overlayText: 'overlay'
}];

//video player object
var devPlayer = videojs('myVideo');

//load the marker plugin
devPlayer.markers({
markers: [],
markerStyle: {
'width': '17px',
'border-radius': '30%',
'background-color': 'green'
},
markerTip:{
display: true,
text: function(marker) {
return marker.text;
},
time: function(marker) {
return marker.time;
}
},
onMarkerClick: function(marker) {}
});
})

HTML

<!- ***** page 1 ***** -->
<div id="page">
<h2>Page 1 {{title}}</h2>

<div id="videoContainer">
<video id = "myVideo" width="600" class="video-js vjs-default-skin" controls>
<source src="videos/xray-stable-ids.mp4" type="video/mp4" />
</video>

<bookmark-list></bookmark-list>
</div>
</div>

<!- ***** page 2 ***** -->
<div id="page">
<h2>Page 2 {{title}}</h2>

<div id="videoContainer">
<video id = "myVideo" width="600" class="video-js vjs-default-skin" controls>
<source src="videos/xray-stable-ids.mp4" type="video/mp4" />
</video>

<bookmark-list></bookmark-list>
</div>
</div>

我还尝试观察路线变化,并尝试加载整个页面,但没有成功。

这是我的笨蛋。请注意,当您在页面之间切换时,您得到的player.markers不是一个函数。我需要理解为什么我会在页面更改上看到它。 https://plnkr.co/edit/OfbJEpgZiGdbXwF3kNE0?p=preview

最佳答案

当您第一次调用 videojs('myVideo') 时,它会返回带有名为 markers方法(函数) 的对象。当您调用它时,它会返回带有属性/方法的 object adddestroygetMarkers 等。随后每次调用 videojs('myVideo') 时,它都会返回该对象。而且你不再有方法 markers() 了。

我在 Controller 中使用简单的 if 语句修复了该问题(两者):

if (typeof devPlayer.markers === 'function') {

devPlayer.markers({

...

}

这是我的 plunker .

关于javascript - 在 Angular 中更改页面时,如何修复 yyyy 不是一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702404/

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