$ scope.$ Watch在Angularjs 1.6中不听



我的脚本有问题,该脚本从零件中收集数据库。我想在下载数据完成时通知Angular,因此我使用了$ Watch。不幸的是,它行不通。Angular呼叫在开始时而不是在更改加载compleplete值之后函数。

angular
.module('app')
.controller('tlmController', function($scope, $http) {
    var vm              = this;
    var data            = [];
    vm.countTestLines   = 0;
    vm.loadingComplete  = false;
    $scope.$watch('vm.loadingComplete', function() {
        console.log(data);
    });     
    $http({
        method: 'GET',
        url: 'app/server/tt/count_testlines.php'
    }).then(function successCallback(response) {
        vm.countTestLines = parseInt(response.data.count);
        downloadInParts(data, 0, vm.countTestLines);
    }, function errorCallback(response) {
        console.log('error');
    });
    var downloadInParts = function(data, offset, max) {         
        if(max < offset) { 
            vm.loadingComplete = true;
            return;
        }
        $http({
            method: 'GET',
            url: 'app/server/tt/get_testlines.php',
            params: { offset: offset }
        }).then(function successCallback(response) {
            data = data.concat(response.data);          
            downloadInParts(data, offset + 5, max);
        }, function errorCallback(response) {
            console.log('error');
        });

    }
});

问题是loadingComplete不是范围的一部分。您应该将其声明为$scope.loadingComplete;

由于您使用的是'vm'而不是'$ scope',因此有必要插入$ scope。$应用在您的功能中。

if(max < offset) { 
     vm.loadingComplete = true;
     $scope.$apply();
     return;
  }

$范围总是监视价值变化,如果有的话,Angular会在内部调用$ digest()函数,并且更改的值将被更新。使用" VM"不会更新导致问题的值。

如果您使用的是var vm = this,这是根据Johnpapa的tyleguide for Angularjs的正确方法,则应将$ Watch重写为:

$scope.$watch(function(){ return vm.loadingComplete }, function() {
    console.log(data);
});

从注释中更新:您的功能参数data从控制器中隐藏您的data变量。

相关内容

  • 没有找到相关文章

最新更新