Я создаю калькулятор точек оставления сертификатов, который является сайтом SPA, где пользователь указывает флажок, если они взяли предмет и вошли в полученную оценку и уровень, на котором они были приняты Это.Добавление предметов в принятый список
У меня есть полностью реализованный интерфейс, а также все функции вычисления, но я изо всех сил стараюсь найти простой способ добавить предметы в новый массив (так называемый takeSubjects) на основе того, отмечен ли флажок.
Это то, что интерфейс выглядит до сих пор.
http://i62.tinypic.com/28rjg2d.png
Я хочу взять в классе в виде строки (которая затем преобразуется в правильное количество точек). Мне также нужно будет взять уровень (переключатели), который также поможет рассчитать очки. И, наконец, взятый (флажок) логический, который будет решать, следует ли добавлять субъекта к массиву, который будет вычисляться в итоговые точки.
У меня нет огромного опыта работы с угловымJS, но я использую фабрику для хранения своих функций. Вот Javascript, который у меня есть до сих пор.
factory.getSubjects = function() {
return subjects;
};
/*
factory.getTakenSubjects = function() {
return
};
factory.getGrade = function() {
scope.subjects.push(
{
grade: $scope.newGrade.grade;
});
}
factory.total = function (subjects, levels,grades) {
var total=0;
for(var i=0;i<subjects.length;i++){
total+=gradeToPoints(subjects[i],levels[i],grades[i]);
}
return total;
};
factory.gradeToPoints= function(subject,level,grade){
var results = 0;
if(level==="Higher"){
results = higherGradeToPoints(grade);
if (subject === "Mathematics" && results>0){//if the subject is maths and they have gotten points then add 25 more to it
results += 25;
}
}else if(level==="Lower"){
results = lowerGradeToPoints(grade);
}else{//level is foundation
if(subject === "Mathematics" || subject === "Irish"){//only two subject allow for this option so check it.
results = foundGradeToPoints(grade);
}
}
return results;
};
factory.foundationGradeToPoints = function (grade) {
switch (grade){
case "A1":
return 20;
case "A2":
return 15;
case "B1":
return 10;
case "B2":
return 5;
}
return 0;
};
factory.lowerGradeToPoints = function (grade) {
switch (grade){
case "A1":
return 60;
case "A2":
return 50;
case "B1":
return 45;
case "B2":
return 40;
case "B3":
return 35;
case "C1":
return 30;
case "C2":
return 25;
case "C3":
return 20;
case "D1":
return 15;
case "D2":
return 10;
case "D3":
return 5;
}
return 0;
};
factory.higherGradeToPoints = function (grade) {
switch (grade){
case "A1":
return 100;
case "A2":
return 90;
case "B1":
return 85;
case "B2":
return 80;
case "B3":
return 75;
case "C1":
return 70;
case "C2":
return 65;
case "C3":
return 60;
case "D1":
return 55;
case "D2":
return 50;
case "D3":
return 45;
}
return 0;
};
*/
return factory;
})
.controller('SimpleController', function($scope, simpleFactory) {
$scope.subjects = simpleFactory.getSubjects();
});
Вам нужно будет прикрепить модель к окну checkbox. Вы это сделали? – raneshu
Возможно, вам понадобится добавить массив в область действия контроллера. –
Добавьте массив к контроллеру, который вы используете при вызове методов обслуживания, например, фабрик, с контроллера для расчета материала. [Вдохновение] (http://plnkr.co/edit/WrK3UzIe5AlhekiCtF1h?p=preview) –