Javascript 检查时启用和禁用角度js切换数据

Javascript 检查时启用和禁用角度js切换数据,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有一个angular应用程序,它有以下切换表: <tr ng-repeat="child in requirements"> <td class="vcenter"> <input type="checkbox" ng-checked="checkedfunction(child)" ng-click="toggleCheck(child)" ng-disabled="required == (planned + completed) &&

我有一个angular应用程序,它有以下切换表:

<tr ng-repeat="child in requirements">
    <td class="vcenter">
    <input type="checkbox" ng-checked="checkedfunction(child)" ng-click="toggleCheck(child)" ng-disabled="required == (planned + completed) && (selectedCourses.indexOf(child) == -1)" value=""/>
    {{child.course.subject}}-{{child.course.course_no}}
    </td>
    <td class="vcenter">{{child.course.course_name}}</td>}
    <td class="vcenter">3</td> 
</tr>

{{child.course.subject}-{{child.course.course{u no}
{{child.course.course_name}}
3.
控制器app.js具有以下功能:

    $scope.toggleCheck = function (course) {
            //checkedfunction(course);
            if (($scope.selectedCourses.indexOf(course) === -1)) {
                $scope.selectedCourses.push(course);
                $scope.planned += 3;    
            } else {
                $scope.selectedCourses.splice($scope.selectedCourses.indexOf(course), 1);
                $scope.planned -= 3;
            }

            $scope.getPercentage();
    };

    $scope.checkedfunction = function(course){
        //$scope.requirementcoursename = [];
        //for(var i = 0; i < $scope.requirements.length; i++){
            $scope.coursedetail = course;
            $scope.requirementcoursename = ($scope.coursedetail.course.subject).concat("-",$scope.coursedetail.course.course_no);
            for(var j = 0; j < $scope.mpttdetails.length; j++){
                if($scope.requirementcoursename==$scope.mpttdetails[j].student_academic_credit.course_name){
                    return true;
                }
            }
            for(var k = 0; k < $scope.planneddetails.length; k++){
                if($scope.requirementcoursename==$scope.planneddetails[k].course_name){
                    return true;
                }
            }
        //} 

    }
$scope.checkMpttdetails = function(course) {
    ...    
}
$scope.toggleCheck=函数(课程){
//检查功能(课程);
if($scope.selectedCourses.indexOf(courses)=-1)){
$scope.selectedCourses.push(课程);
$scope.planned+=3;
}否则{
$scope.selectedCourses.splice($scope.selectedCourses.indexOf(courses),1);
$scope.planned-=3;
}
$scope.getPercentage();
};
$scope.checkedfunction=函数(课程){
//$scope.requirementcoursename=[];
//对于(变量i=0;i<$scope.requirements.length;i++){
$scope.coursedetail=课程;
$scope.requirementcoursename=($scope.coursedetail.course.subject).concat(“-”,$scope.coursedetail.course.course\u编号);
对于(变量j=0;j<$scope.mpttdetails.length;j++){
如果($scope.requirementcoursename==$scope.mpttdetails[j].学生\学术\学分.课程\名称){
返回true;
}
}
对于(变量k=0;k<$scope.planneddetails.length;k++){
如果($scope.requirementcoursename==$scope.planneddetails[k]。课程名称){
返回true;
}
}
//} 
}
在这里,如果课程已经存在于任何数据数组中,将检查切换,如
checkedfunction()
中所示

但我想知道是否有办法禁用
mpttdetails
中正在检查的课程,并保持
plannedetails
处于启用状态


如果子项出现在mpttdetails中,我将尝试检查并禁用切换(就像我在ng checked中所做的那样)(即在mpttdetails循环中执行检查时返回true)。如果没有,它将保持选中和启用状态

中断您的
mpttdetails
签出
检查功能
,创建一个新的作用域功能:

    $scope.toggleCheck = function (course) {
            //checkedfunction(course);
            if (($scope.selectedCourses.indexOf(course) === -1)) {
                $scope.selectedCourses.push(course);
                $scope.planned += 3;    
            } else {
                $scope.selectedCourses.splice($scope.selectedCourses.indexOf(course), 1);
                $scope.planned -= 3;
            }

            $scope.getPercentage();
    };

    $scope.checkedfunction = function(course){
        //$scope.requirementcoursename = [];
        //for(var i = 0; i < $scope.requirements.length; i++){
            $scope.coursedetail = course;
            $scope.requirementcoursename = ($scope.coursedetail.course.subject).concat("-",$scope.coursedetail.course.course_no);
            for(var j = 0; j < $scope.mpttdetails.length; j++){
                if($scope.requirementcoursename==$scope.mpttdetails[j].student_academic_credit.course_name){
                    return true;
                }
            }
            for(var k = 0; k < $scope.planneddetails.length; k++){
                if($scope.requirementcoursename==$scope.planneddetails[k].course_name){
                    return true;
                }
            }
        //} 

    }
$scope.checkMpttdetails = function(course) {
    ...    
}
这样,您仍然可以从
checkedFunction

$scope.checkedfunction = function(course){
    ...
    if ($scope.checkMpttdetails) { return true }
    ...
}
ng表达式中使用它时,禁用了

ng-disabled="(required == (planned + completed) && 
(selectedCourses.indexOf(child) == -1)) || checkMpttdetails(child)"

我意识到还有一些需要重构的额外细节(例如如何使用
checkedFunction
顶部传递的参数),但这些都留给你了。

我想我对你的意思感到困惑,因为我的第一个回答是“只需删除检查mpttdetails的for循环。你能进一步描述一下你想要改变什么吗?我正在尝试检查并禁用切换(就像我在ng checked中所做的那样),如果子项出现在mpttdetails中(即在mpttdetails循环中执行检查时返回true)。如果没有,它将保持检查和启用状态。嗨…功能运行良好。但是禁用部分不知何故没有工作..我不确定表达式中
required
的值是什么意思。有必要吗?或者你可以去掉它,只保留表达式的右边吗?你需要平等性测试吗?是的,这是必需的,因为我有另一个条件,在几个有限的选择之后禁用整个表。听起来这是两个独立的条件,然后。请尝试在我的答案中更新的表达式。