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

时间:2014-05-30 16:58:49

标签: javascript jquery angularjs

我有一个角度应用程序,其中包含以下切换表:

<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>

控制器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;
                }
            }
        //} 

    }

此处,如果checkedfunction()中所示的任何数据阵列中已存在课程,则将检查切换。

但我想知道是否有办法禁用mpttdetails中正在检查的课程并启用planneddetails

我正在尝试检查并禁用切换(就像我在ng-checked中所做的那样)如果孩子在mpttdetails中存在(即,当在mpttdetails循环上执行检查时它返回true)。如果没有,它将保持检查并启用

1 个答案:

答案 0 :(得分:0)

打破mpttdetails checkFunction签出,创建新的范围功能:

$scope.checkMpttdetails = function(course) {
    ...    
}

这样,你仍然可以从checkedFunction

调用它
$scope.checkedfunction = function(course){
    ...
    if ($scope.checkMpttdetails) { return true }
    ...
}

ng-disabled表达式

中使用它时
ng-disabled="(required == (planned + completed) && 
(selectedCourses.indexOf(child) == -1)) || checkMpttdetails(child)"

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