Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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
Angularjs 当$interval调用执行$route.reload的服务时,ng view div将呈现两次_Angularjs_Routes_Setinterval_Reload_Ng View - Fatal编程技术网

Angularjs 当$interval调用执行$route.reload的服务时,ng view div将呈现两次

Angularjs 当$interval调用执行$route.reload的服务时,ng view div将呈现两次,angularjs,routes,setinterval,reload,ng-view,Angularjs,Routes,Setinterval,Reload,Ng View,假设我的应用程序是新闻阅读器。它每X秒刷新一次以获取传入新闻 您已将页面向下滚动了一半。然后,ng视图将自动刷新 如果我什么也不做,当卷轴被踢回页面顶部时,你将失去你的位置 因此,在刷新之前,我使用一个服务记录滚动条的数字位置。我刷新。我将滚动条重置为旧值。您应该在旧的滚动位置。不起作用 实际发生的情况是,当我逐步浏览代码时,在重新加载过程中,ng div被渲染两次 在屏幕和DOM中,我可以看到充满内容的“旧”ng视图 同时,我还可以看到一个“新”ng视图,相同的名称,相同的所有内容,作为“旧”

假设我的应用程序是新闻阅读器。它每X秒刷新一次以获取传入新闻

您已将页面向下滚动了一半。然后,ng视图将自动刷新

如果我什么也不做,当卷轴被踢回页面顶部时,你将失去你的位置

因此,在刷新之前,我使用一个服务记录滚动条的数字位置。我刷新。我将滚动条重置为旧值。您应该在旧的滚动位置。不起作用

实际发生的情况是,当我逐步浏览代码时,在重新加载过程中,ng div被渲染两次

在屏幕和DOM中,我可以看到充满内容的“旧”ng视图

同时,我还可以看到一个“新”ng视图,相同的名称,相同的所有内容,作为“旧”ng视图的兄弟住在dom中

我感到震惊,因为我没有预料到这在任何时候的周期

新的ng视图完全没有内容

我成功地提取了滚动位置。我试图在新div上设置滚动位置,但当angular执行超出我控制的操作时,新div将被渲染并填充内容,并且滚动设置为顶部。我的旧设置被忽略/破坏

我已经花了很长时间试图找到一种方法来解决“新”ng视图的滚动位置,但每次刷新后,所有尘埃都已尘埃落定,但

任何提示、提示、技巧、谣言,不胜感激。谢谢

以下是相关的代码片段:

视图:(ng视图是类“hog”)

服务:

app.service('pane', function($route, $window) {

    // comes here once at start
    console.log('in service pane');
    var _scrollLocation;

    return {
                scrollLocationGet: scrollLocationGet,
                scrollLocationSet: scrollLocationSet,
                refreshReroll: refreshReroll
    };

    function scrollLocationGet(){     
        return angular.element(document.getElementById('viewport')).scrollTop(); 
    }

    function scrollLocationSet(val){
        var hogs=angular.element(document.getElementsByClassName('hog'));
        if (hogs.length > 1){
            // At this point I have TWO ng-views in the DOM
            angular.element(document.getElementsByClassName('hog'))[0].scrollTop = 124;            
            angular.element(document.getElementsByClassName('hog'))[1].scrollTop = 124;
        }


    }

    function refreshReroll() {
        console.log('at refreshReroll - about to reload');
        $route.reload();
    }

});

您需要取消更改路线时的$interval

      $scope.stopTime = $interval(updateTime, 1000);

      $scope.on('$destroy', function() {
        $interval.cancel($scope.stopTime);
      });
RTFD和

app.service('pane', function($route, $window) {

    // comes here once at start
    console.log('in service pane');
    var _scrollLocation;

    return {
                scrollLocationGet: scrollLocationGet,
                scrollLocationSet: scrollLocationSet,
                refreshReroll: refreshReroll
    };

    function scrollLocationGet(){     
        return angular.element(document.getElementById('viewport')).scrollTop(); 
    }

    function scrollLocationSet(val){
        var hogs=angular.element(document.getElementsByClassName('hog'));
        if (hogs.length > 1){
            // At this point I have TWO ng-views in the DOM
            angular.element(document.getElementsByClassName('hog'))[0].scrollTop = 124;            
            angular.element(document.getElementsByClassName('hog'))[1].scrollTop = 124;
        }


    }

    function refreshReroll() {
        console.log('at refreshReroll - about to reload');
        $route.reload();
    }

});
      $scope.stopTime = $interval(updateTime, 1000);

      $scope.on('$destroy', function() {
        $interval.cancel($scope.stopTime);
      });