Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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

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
Javascript 将主题添加到已拍摄列表中_Javascript_Angularjs_Twitter Bootstrap_Checkbox_User Input - Fatal编程技术网

Javascript 将主题添加到已拍摄列表中

Javascript 将主题添加到已拍摄列表中,javascript,angularjs,twitter-bootstrap,checkbox,user-input,Javascript,Angularjs,Twitter Bootstrap,Checkbox,User Input,我正在创建一个离开证书积分计算器,这是一个SPA网站,用户在其中勾选一个复选框,如果他们选择了主题,并输入他们收到的分数和他们选择的级别 我已经完全实现了界面以及所有的计算功能,但我正在努力寻找一种简单的方法,根据是否勾选复选框,将主题添加到一个新数组(称为takenSubjects) 到目前为止,界面就是这样的 我想把分数作为一个字符串(然后转换成正确的分数)。我还需要在水平(单选按钮),这也将有助于计算点。最后是Take(复选框)布尔值,它将决定是否将主题添加到要计算到总分的数组中 我没有

我正在创建一个离开证书积分计算器,这是一个SPA网站,用户在其中勾选一个复选框,如果他们选择了主题,并输入他们收到的分数和他们选择的级别

我已经完全实现了界面以及所有的计算功能,但我正在努力寻找一种简单的方法,根据是否勾选复选框,将主题添加到一个新数组(称为takenSubjects)

到目前为止,界面就是这样的

我想把分数作为一个字符串(然后转换成正确的分数)。我还需要在水平(单选按钮),这也将有助于计算点。最后是Take(复选框)布尔值,它将决定是否将主题添加到要计算到总分的数组中

我没有大量的angularJS经验,但我正在使用一个工厂来保存我的功能。这是我到目前为止所使用的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();
    });
factory.getSubjects=函数(){
返回主题;
};
/*  
factory.getTakenSubjects=函数(){
回来
};
factory.getGrade=函数(){
范围、主题、推动(
{
等级:$scope.newGrade.grade;
});
}
factory.total=功能(科目、级别、等级){
var合计=0;
对于(var i=0;i0){//如果科目是数学,并且他们得到了分数,那么再加25分
结果+=25;
}
}否则,如果(级别==“较低”){
结果=较低的RadeTopoints(等级);
}{//Lead是基础
如果(subject==“Mathematics”| | subject==“Irish”){//只有两个科目允许此选项,请选中它。
结果=foundGradeToPoints(等级);
}
}
返回结果;
};      
factory.foundationGradeToPoints=功能(等级){
道岔(坡度){
案例“A1”:
返回20;
案例“A2”:
返回15;
案例“B1”:
返回10;
案例“B2”:
返回5;
}   
返回0;
};
factory.lowerGradeToPoints=功能(等级){
道岔(坡度){
案例“A1”:
返回60;
案例“A2”:
返回50;
案例“B1”:
返回45;
案例“B2”:
返回40;
案例“B3”:
返回35;
案例“C1”:
返回30;
案例“C2”:
返回25;
案例“C3”:
返回20;
案件“D1”:
返回15;
案件“D2”:
返回10;
案例“D3”:
返回5;
}
返回0;
};
factory.higherGradeToPoints=功能(等级){
道岔(坡度){
案例“A1”:
返回100;
案例“A2”:
返回90;
案例“B1”:
返回85;
案例“B2”:
返回80;
案例“B3”:
返回75;
案例“C1”:
返回70;
案例“C2”:
返回65;
案例“C3”:
返回60;
案件“D1”:
返回55;
案件“D2”:
返回50;
案例“D3”:
返回45;
}
返回0;
};
*/
返回工厂;
})
.controller('SimpleController',函数($scope,simpleFactory){
$scope.subjects=simpleFactory.getSubjects();
});

您应该使用ng repeat在html视图中构建主题列表。 以及使用ng模型(在初始化时设置)和一些

<div ng-controller="myCtrl1">
  <div ng-repeat="subject in subjects track by $index">
    <input type="checkbox" ng-model="subject.taken[$index] ng-change="setTaken(subject, $index, value)""/>
    <span>{{subject.name}}</span>
  </div>
</div>

在工厂中,一种方法可以将某些内容设置/存储到后端或其他类型的存储中,以便getter能够获取这些内容。

如果更改应用程序体系结构,可能会更好。也就是说,更改工厂并向控制器添加更多。 我会给你一些提示,但不是整个应用程序的代码。你需要自己解决这个问题

以下是您可能需要遵循的一些步骤: 1) 添加
var takenSubjects=[]到工厂的开头。这是一个数组,它将保存您所拍摄的主题

2) 在工厂中包含一个函数,允许您将具有主题详细信息的对象添加到数组中。函数应如下所示:

    factory.addTakenSubject = function(subject) {
        takenSubjects.push(subject);
    };]

    //The objects you will be adding would be like this:  - but don't worry about the object right now.
  {
    subject: 'Accounting,
    taken: true, //or false..whichever
    level: "ordinary"
    gradeReceived: "A"
  }
3) 现在您可以将模型附加到html中的所有字段。下面是一个如何将模型添加到复选框字段的示例。很简单-

要知道该复选框是否已选中,您需要将模型附加到视图(html)中的复选框中。请记住,您的工厂无法与视图交互,因此您的控制器需要获取复选框状态(如果选中,则为true;如果未选中,则为false),然后您可以将其分配给SimpleFactory.addTakenSubject(subject)

例如,您的html应该如下所示:

   <input type="checkbox" ng-model="subject.taken"> //must be in scope of SimpleController
请记住-您的ng模型应该与控制器中的对象键相同

而这正是你的出发点。你不需要完全遵循这一点。但这应该会有帮助

需要注意的一点是:确保定义因子的语法有效。下面是我如何定义工厂的:

     var app = angular.module('myApp', []);
     app.factory('myFactory', [function(){
        var takenSubjects = [];
        return{
           addTakenSubject: function() {
               takenSubjects.push(subject);
           }
         }
   }]);
  //this is only one function. You can add more key value pairs in the return object.
  //**remember - factories return objects** 

您将需要将模型附加到che
   .controller('SimpleController', function($scope, simpleFactory) {
        $scope.subject={subject:"", taken:false, level:"", gradeReceived:""};//taken is defaulted to false
        $scope.add = function() {
        simpleFactory.addTakenSubject($scope.subject);//$scope.subject will no
        });
      });
     var app = angular.module('myApp', []);
     app.factory('myFactory', [function(){
        var takenSubjects = [];
        return{
           addTakenSubject: function() {
               takenSubjects.push(subject);
           }
         }
   }]);
  //this is only one function. You can add more key value pairs in the return object.
  //**remember - factories return objects**