Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 倒计时指令和角度控制器之间的干扰?_Javascript_Angularjs - Fatal编程技术网

Javascript 倒计时指令和角度控制器之间的干扰?

Javascript 倒计时指令和角度控制器之间的干扰?,javascript,angularjs,Javascript,Angularjs,在我的应用程序中,两个角函数之间有一些非常奇怪的干扰,我无法解释。问题的最终结果导致出现以下情况: 我有一个倒计时指令嵌入在我的一个页面中,这也是一个角度控制器的域。下面是倒计时指令: (function() { var app = angular.module('app'); app.directive('countdown', ['$interval', function($interval) { return { restrict

在我的应用程序中,两个角函数之间有一些非常奇怪的干扰,我无法解释。问题的最终结果导致出现以下情况:

我有一个倒计时指令嵌入在我的一个页面中,这也是一个角度控制器的域。下面是倒计时指令:

(function() {
    var app = angular.module('app');

    app.directive('countdown', ['$interval', function($interval) {
        return {
            restrict: 'E',
            scope: {
                specificity: '=',
                countdownTo: '=',
                callback: '&?'
            },
            link: function($scope, elem, attrs) {

                $scope.isLaunchExact = ($scope.specificity == 6 || $scope.specificity == 7);

                $scope.$watch('specificity', function(newValue) {
                    $scope.isLaunchExact = (newValue == 6 || newValue == 7);
                });

                var countdownProcessor = function() {

                    var launchUnixSeconds = $scope.launchUnixSeconds;
                    var currentUnixSeconds = Math.floor(Date.now() / 1000);

                    if (launchUnixSeconds >= currentUnixSeconds) {
                        $scope.secondsAwayFromLaunch = launchUnixSeconds - currentUnixSeconds;

                        var secondsBetween = $scope.secondsAwayFromLaunch;
                        // Calculate the number of days, hours, minutes, seconds
                        $scope.days = Math.floor(secondsBetween / (60 * 60 * 24));
                        secondsBetween -= $scope.days * 60 * 60 * 24;

                        $scope.hours = Math.floor(secondsBetween / (60 * 60));
                        secondsBetween -= $scope.hours * 60 * 60;

                        $scope.minutes = Math.floor(secondsBetween / 60);
                        secondsBetween -= $scope.minutes * 60;

                        $scope.seconds = secondsBetween;

                        $scope.daysText = $scope.days == 1 ? 'Day' : 'Days';
                        $scope.hoursText = $scope.hours == 1 ? 'Hour' : 'Hours';
                        $scope.minutesText = $scope.minutes == 1 ? 'Minute' : 'Minutes';
                        $scope.secondsText = $scope.seconds == 1 ? 'Second' : 'Seconds';
                    } else {
                    }

                    if (attrs.callback) {
                        $scope.callback();
                    }
                };

                // Countdown here
                if ($scope.isLaunchExact) {
                    $scope.launchUnixSeconds = moment($scope.countdownTo).unix();
                    $interval(countdownProcessor, 1000);
                } else {
                    $scope.countdownText = $scope.countdownTo;
                }
            },
            templateUrl: '/js/templates/countdown.html'
        }
    }]);
})();
以下是受干扰的角度控制器:

(function() {
    var app = angular.module('app', []);

    //app.value('duScrollDuration', 1000);

    app.controller("homeController", ['$scope', 'Statistic', function($scope, Statistic) {
        $scope.statistics = [];
        $scope.activeStatistic = false;

        $scope.goToClickedStatistic = function(statisticType) {
            history.replaceState('', document.title, '#' + statisticType);
            $scope.activeStatistic = statisticType;
        };

        $scope.goToNeighborStatistic = function(index) {
            if (index >= 0 && index < $scope.statistics.length) {
                var stat = $scope.statistics[index];

                history.replaceState('', document.title, '#' + stat.camelCaseType); // WhyIsThisFlashing
                $scope.activeStatistic = stat.camelCaseType;

                return stat.camelCaseType;
            } else {
                $scope.goHome();
            }
        };

        $scope.goToFirstStatistic = function() {

        };

        $scope.goHome = function() {
            history.replaceState('', document.title, window.location.pathname);
            $scope.activeStatistic = false;
            return 'home';
        };

        /*$window.on('scroll',
            $.debounce(100, function() {
                $('div[data-stat]').fracs('max', 'visible', function(best) {
                    $scope.activeStatistic($(best).data('stat'));
                });
            })
        );*/

        (function() {
            laravel.statistics.forEach(function(statistic) {
                $scope.statistics.push(new Statistic(statistic));
            });

            if (window.location.hash) {
                $scope.activeStatistic = window.location.hash.substring(1);
            }
        })();
    }]);

    app.factory('Statistic', function() {
        return function(statistic) {

            var self = {};

            self.changeSubstatistic = function(newSubstatistic) {
                self.activeSubstatistic = newSubstatistic;
            };

            statistic.forEach(function(substatistic) {

                if (!self.substatistics) {

                    self.substatistics = [];
                    self.activeSubstatistic = substatistic;
                    self.type = substatistic.type;
                    self.camelCaseType = self.type.replace(" ", "");
                }

                self.substatistics.push(substatistic);
            });

            return self;
        }
    });
})();
为什么“goToNeighborStatistic”出现在这本书中?为什么会出现这个脚本?从那里开始,
goToNeighborStatistic()
运行,此时再次调用倒计时并重复所有操作。这是怎么回事

编辑:

在Chrome中,每一步都会产生不同的结果。在
countdownProcessor
函数的末尾,单步执行会产生以下结果:


我不太清楚您的问题,因为我在您的代码中找不到文本“WhyIsThisFlash”;你把它放在哪里?(我意识到“为什么闪烁”可能是调试)对不起,这只是bug的副作用。如果您查看
goToNeighborStatistic
函数,我已经注释了闪烁位。它通常会改变URL的哈希值,我只是硬编码了“WhyIsThisFlash”,用于调试目的,正如您所提到的。不过我离题了,因为我所说的一切都与实际的bug无关,哈。我猜你是在浏览浏览器(Chrome?)。如果是这样,调用堆栈会有帮助吗?我希望它能显示对SCRIPT0中代码的调用来自何处。另外,您是否已清除浏览器中的缓存?SCRIPT0看起来像控制器文件的缩小版和旧版吗?它在Firefox中被称为
SCRIPT0
。Chrome将其标记为
VM305
。我已经发布了文件的内容,但我没有写它。callstack并不是特别有用——它只是一步一步地通过Angular.js。我看不到任何标记,你在指令上向callback传递了什么?你的问题对我来说并不完全清楚,因为我在你的代码中找不到文本“WhyIsThisFlash”;你把它放在哪里?(我意识到“为什么闪烁”可能是调试)对不起,这只是bug的副作用。如果您查看
goToNeighborStatistic
函数,我已经注释了闪烁位。它通常会改变URL的哈希值,我只是硬编码了“WhyIsThisFlash”,用于调试目的,正如您所提到的。不过我离题了,因为我所说的一切都与实际的bug无关,哈。我猜你是在浏览浏览器(Chrome?)。如果是这样,调用堆栈会有帮助吗?我希望它能显示对SCRIPT0中代码的调用来自何处。另外,您是否已清除浏览器中的缓存?SCRIPT0看起来像控制器文件的缩小版和旧版吗?它在Firefox中被称为
SCRIPT0
。Chrome将其标记为
VM305
。我已经发布了文件的内容,但我没有写它。callstack并不是特别有用——它只是一步一步地通过Angular.js。我看不到任何标记,您在指令上向callback传递了什么?
"use strict";
var fn=function(s,l,a,i){var v0,v1,v2,v3=l&&('goToNeighborStatistic' in l),v4,v5,v6=l&&('\u0024index' in l);v2=v3?l:s;if(!(v3)){if(s){v1=s.goToNeighborStatistic;}}else{v1=l.goToNeighborStatistic;}if(v1!=null){ensureSafeFunction(v1,text);if(!(v6)){if(s){v5=s.$index;}}else{v5=l.$index;}v4=ifDefined(v5,0)-ifDefined(1,0);ensureSafeObject(v2,text);v0=ensureSafeObject(v2.goToNeighborStatistic(ensureSafeObject(ifDefined(v5,0)-ifDefined(1,0),text)),text);}else{v0=undefined;}return v0;};return fn;