设置后无法访问AngularJS的变量

时间:2018-03-28 13:51:41

标签: angularjs angularjs-scope

我正在一个项目中工作,我在使用控制器中的一些变量时遇到了一些问题。这是控制器的代码

angular.module('wc-general-informe-notas')
.controller('AnalisisEvaluacionController', ['$scope','$state','urlBasePartials', 'idColegio', 'anio', 'EvaluacionFactory',
function ($scope, $state, urlBasePartials, idColegio, anio, EvaluacionFactory) {
    //Default ranges that clasifies 
    $scope.scoreRange = [
        {level: "Very low", from: 1, to: 3.9},
        {level: "Low", from: 4, to: 4.9},
        {level: "High", from: 5, to: 5.9},
        {level: "Excellent", from: 6, to: 7},
    ];
    $scope.setRange = function () {
        $scope.ranges = $scope.scoreRange;
    }
    $scope.informe =13;
    $scope.levels = [];
    $scope.idColegio = idColegio;
    $scope.anio = anio;
    $scope.nombreCurso = $('#curso option:selected').text();
    $scope.casillero = $('#casillero option:selected').text();
    $scope.evaluation = null;
    $scope.setRange();

    $scope.generateReport = function () {
        EvaluacionFactory.patch({
            idEvaluacion: $scope.filtroCasillero,
            idSector: $scope.filtroAsignatura,
            idCurso: $scope.filtroCurso,
            idEvaluacionCursoSector: $scope.evaluacionCs[$scope.filtroPeriodo],
            'expand[]': ['r_evaluacion_nota','nota_detalle','r_nota_alumno','alumno_detalle']
        }, function (evaluation) {
            $scope.evaluation = evaluation;
            $scope.adjustLevels();
        })
    }
    $scope.getRange = function (value) {
        for (var i in $scope.ranges)
        {
            var range = $scope.ranges[i];
            if (value == range.from || value == range.to || (value > range.from && value < range.to))
                return range.level;
        }
    }
    function init() {
        $scope.profesor = null;
        $scope.$parent.cursos_lista.forEach(function (curso) {
            if(curso.id == $scope.filtroCurso)
            {
                if(curso.profesor != undefined)
                {
                    var profesor = curso.profesor.usuario_detalle[0];
                    $scope.profesor = profesor.nombres + " " + profesor.apellido_paterno + " " + profesor.apellido_materno;
                    $scope.profesor = $scope.profesor.toString().toLowerCase();
                }
            }
        })
        if ($scope.ranges == undefined)
            $scope.setRange();
        if ($scope.filtroCasillero != null)
            $scope.generateReport();
    }
    init();
    $scope.adjustLevels = function () {
        for(var i in $scope.evaluation.scores)
            $scope.levels[$scope.evaluation.scores[i].id] = $scope.getRange($scope.evaluation.scores[i].valor);
    }
}]);

该控制器所做的是从工厂获取数据,该工厂带来评估所具有的所有分数。我在视图中正确呈现所有数据,问题是在视图中用户可以修改$scope.ranges,然后单击调用ng-click的按钮($scope.adjustLevels),该按钮应显示新的根据新的$scope.ranges&#39;值。

每次调用$scope.adjustLevels时都会抛出一个错误 $scope.evaluationnull,即使在从工厂接收数据后调用时也没有问题。

似乎我无法访问我之前设置的所有变量。 可能发生什么?我之前没遇到过这类问题。 我尝试添加console.log($scope.levels)console.log($scope.evaluation),只有在调用方法init()时才会显示其内容,但是当我从视图中的按钮调用它时则不会显示它们的内容。当我这样做时,会显示一个空数组null,它们是默认情况下在开头

定义的值

1 个答案:

答案 0 :(得分:0)

您希望$scope.generateReport()设置$scope.evaluation,但您有此条件

if ($scope.filtroCasillero != null)
        $scope.generateReport();

未声明$scope.filtroCasillero使$scope.generateReport()永远无法运行,这就是$scope.evaluation为空的原因