ng-repeat

时间:2016-03-19 17:24:21

标签: javascript angularjs

我试图在ng-repeat中使用嵌套控制器,以便页面上的折叠面板在不同的范围内运行(可能有更好的方法)。问题是嵌套控制器中的代码永远不会被执行。我把一个"调试器"在顶部停止点,它永远不会被击中。

这是我的HTML:

<script src="~/Scripts/app/LWS/LWSCtrl.js"></script>
<script src="~/Scripts/app/LWS/lwsService.js"></script>
<script src="~/Scripts/app/Common/commonCtrl.js"></script>
<script src="~/Scripts/app/Common/commonService.js"></script>

<div ng-app-="myModule" ng-controller="LWSCtrl">
<div cg-busy="waitopr"></div>
<tabset>
    <tab heading="Dashboard">
        <div ng-repeat="m in majors">
            <div ng-controller="commonCtrl">
                <accordion close-others="oneAtATime">
                    <accordion-group is-open="status.open">
                        <accordion-heading>
                            <div style="height:20px">
                                <span class="pull-left">{{m.MajorName}}</span><i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-up': status.open, 'glyphicon-chevron-down': !status.open}"></i>
                            </div>
                        </accordion-heading>
...(shortened for brevity)

以下是嵌套控制器的全部内容:

angular.module('myModule').controller('commonCtrl', function ($scope, commonService, $, $timeout, $filter, $interval, $window) {
debugger;
$scope.oneAtATime = true;
$scope.status = {
    isFirstOpen: false,
    isFirstDisabled: false
};
getDashboard();
function getDashboard() {
    $scope.waitopr = commonService.getlwsdashboard()
    .success(function (data) {
        $scope.dashboard = data;
        var arr = {};
        for (var i = 0, len = $scope.dashboard.length; i < len; i++) {
            arr[$scope.dashboard[i]['CompanyID']] = $scope.dashboard[i];
        };
        $scope.majors = new Array();
        for (var key in arr) {
            $scope.majors.push(arr[key]);
        }
        angular.forEach($scope.majors, function (value, key) {
            for (var i = 0; i < $scope.dashboard.length; i++) {
                if (value.CompanyID == $scope.dashboard[i].CompanyID) {
                    $scope.majors[key].header = $scope.dashboard[i];
                };
            }
        })
        angular.forEach($scope.majors, function (value, key) {
            $scope.waitopr = commonService.getlegend(value.CompanyID)
            .success(function (data) {
                $scope.majors[key].Legend = data;
                for (var i = 0; i < $scope.dashboard.length; i++) {
                    if (value.CompanyID == $scope.dashboard[i].CompanyID) {
                        $scope.majors[key].MajorName = $scope.dashboard[i].MajorName;
                    };
                }
            });//end success
        });//end forEach
        angular.forEach($scope.majors, function (value, key) {
            for (var i = 0; i < $scope.dashboard.length; i++) {
                if (value.CompanyID == $scope.dashboard[i].CompanyID) {
                    items.push($scope.dashboard[i]);
                };
            }
            $scope.majors[key].items = items;
            items = [];
        })


    });//end success
};

})

我不明白为什么嵌套控制器代码没有执行。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您的控制器已附加到$cnt=0; foreach($q->fetchAll() as $k=>$v) { $cnt++; echo '<th>'. $v['date'].'</th>'; if($cnt===4) { echo "</tr><tr>"; $cnt=0; } } 中的元素。如果您重复的项目为空/未定义,则永远不会调用您的控制器实例。

您必须确保在父ng-repeat中填充majors且非空。