达到10 $ digest()次迭代。中止

时间:2014-03-10 17:14:18

标签: angularjs angularjs-directive

我收到此错误消息时,每次尝试点击或使用滑块栏时,我的视频标记都会重新加载。为什么?我听说如果你改变指令本身正在观察的指令中的变量,你会得到这个消息。这是有道理的,但即使我用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?

1 个答案:

答案 0 :(得分:1)

我通过将第三个参数添加到$watch布尔值objectEquality来解决了这个问题。

$watch(attrs.videoLoader, function(){...}, true)