我收到此错误消息时,每次尝试点击或使用滑块栏时,我的视频标记都会重新加载。为什么?我听说如果你改变指令本身正在观察的指令中的变量,你会得到这个消息。这是有道理的,但即使我用scope.state.tutorialNumber++
注释掉这一行也没有区别。我错过了什么?
HTML
<video ng-click="clickPause()" poster="./poster.png" video-watcher class="video-js vjs-default-skin" id="myvideo" congrats="state.questionNumber" video-loader="[state.tutorialNumber, state.sectionNumber]" id="video" controls>
<source type="video/mp4" src="{{sections[state.sectionNumber].tutorials[state.tutorialNumber].name}}.mp4"></source>
<source type="video/webm" src="{{sections[state.sectionNumber].tutorials[state.tutorialNumber].name}}.webm"></source>
Your browser does not support the video tag.
</video>
和指令
app.directive('videoWatcher', function ($location) {
return function (scope, video, attrs) {
scope.$watch(attrs.videoLoader, function () {
$(video[0]).bind('ended', function () {
$(this).unbind('ended');
if (!this.ended) {
return;
};
var url = "/"+sections[scope.state.sectionNumber].name +"/"+ scope.state.tutorialNumber++;
$location.path(url);
scope.$apply();
});
setPause(scope.sections[scope.state.sectionNumber].tutorials[scope.state.tutorialNumber].pause);
video[0].load();
video[0].play();
});
scope.$watch(attrs.congrats, function(){
if (scope.state.questionNumber === scope.sections[scope.state.sectionNumber].tutorials[scope.state.tutorialNumber].material.length){
video[0].play();
setTimeout(function () {
video[0].play();
}, 500);
}
});
};
})
编辑:好的,如果我注释掉第一个$watch
我没有收到错误,但是如果我在第一个手表中注释掉所有代码,我就会收到错误。我似乎只是在看一个数组[state.tutorialNumber, state.sectionNumber]
。我觉得那很好。可能是我使用角度1.0.4?
答案 0 :(得分:1)
我通过将第三个参数添加到$watch
布尔值objectEquality
来解决了这个问题。
$watch(attrs.videoLoader, function(){...}, true)