我正在一个项目中工作,我在使用控制器中的一些变量时遇到了一些问题。这是控制器的代码
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.evaluation
为null
,即使在从工厂接收数据后调用时也没有问题。
似乎我无法访问我之前设置的所有变量。
可能发生什么?我之前没遇到过这类问题。
我尝试添加console.log($scope.levels)
和console.log($scope.evaluation)
,只有在调用方法init()
时才会显示其内容,但是当我从视图中的按钮调用它时则不会显示它们的内容。当我这样做时,会显示一个空数组null
,它们是默认情况下在开头
答案 0 :(得分:0)
您希望$scope.generateReport()
设置$scope.evaluation
,但您有此条件
if ($scope.filtroCasillero != null)
$scope.generateReport();
未声明$scope.filtroCasillero
使$scope.generateReport()
永远无法运行,这就是$scope.evaluation
为空的原因