2016-01-20 41 views
0

所以我的代碼角沒有看到JSON陣列中的所有對象

$scope.pauseChecked = function(monitorId, groupName) { 
    for (var i = 0; i < $scope.monitorResults.length; i++) { 
    if (document.getElementById('checkboxId').checked) { 
     adminService.pauseMonitor(monitorId, groupName).then(function(response) { 
     $scope.getMonitorResultsForSelectedGroups(); 
     $scope.filterResults(); 
     var keepGoing = true; 
     angular.forEach($scope.monitorResults, function(monitor) { 
      if (keepGoing) { 
      if (monitor.id == monitorId && groupName == monitor.groupName) { 
       monitor.triggerRunning = false; 
       keepGoing = false; 
      } 
      } 
     }); 
     }); 
    } 
    } 
}; 

這部分該行的所有的內部工作正常

<tr ng-repeat="result in monitorResults" ng-click="setSelected(result.id)" ng-class="{highlighted: result.id === selectedRow, selected: checkboxId}"> 

這條線外NG-重複

<td ng-show="monitorResults.triggerRunning"><button class="btn btn-info" style="width: 150px" ng-click="pauseChecked(monitorResults.id, monitorResults.groupName)">Pause Checked </button></td> 

並且這是怎麼看它的頁面

<table style="float:left; margin-left: auto; margin-right: auto;"> 
    <tr > 
     <td><button class="btn btn-primary" ng-click="runAllMonitorsNew()" style="width: 150px">Run All Monitors</button></td> 
     <td ng-show="!checkedGroup"><button class="btn btn-primary" style="width: 150px" ng-click="pauseGrMonitors(result.groupName)">Pause Monitors</button></td> 
     <td ng-show="checkedGroup"><button class="btn btn-primary" style="width: 150px" ng-click="resumeGrMonitors(result.groupName)">Resume Monitors</button></td> 
    </tr> 
     <tr> 
     <td><button ng-click="runChecked(result.id,result.groupName)" class="btn btn-info" style="width: 150px">Run Checked</button></td> 
     <td ng-show="monitorResults[0].triggerRunning"><button class="btn btn-info" style="width: 150px" ng-click="pauseChecked(monitorResults.id,monitorResults.groupName)">Pause Checked </button></td> 
     <td ng-show="!monitorResults[0].triggerRunning"><button class="btn btn-info" style="width: 150px" ng-click="resumeChecked(monitorResults.id,monitorResults.groupName)">Resume Checked</button></td> 
    </tr> 
</table> 
<table style="float: right; margin-right: 50px"> 
    <tr> 
     <td> 
      <json-editor-input model="monitorResults" configuration="configuration" on-error="onError(err)"/> 
     </td> 
    </tr> 
</table> 
</div> 
<BR> 
     <img class="center-block" src="ajax-loader.gif" ng-show="loading"/> 
<BR> 
<table class="table table-striped table-bordered"> 
    <tr> 
     <td><B>Monitor Id</B></td> 
     <td><B>Monitor Name</B></td> 
     <td><B>Monitor Type</B></td> 
     <td><B>Group Type</B></td> 
     <td><B>Warn Threshold</B></td> 
     <td><B>Error Threshold</B></td> 
     <td><B>Monitor Result</B></td> 
     <td><B>Compare Result</B></td> 
     <td><B>Last Run Date</B></td> 

    </tr> 
     <tr ng-repeat="result in monitorResults" ng-click="setSelected(result.id)" ng-class="{highlighted: result.id === selectedRow, selected: checkboxId}"> 
     <td><input type="checkbox" ng-model="checkboxId" id="checkboxId" name="checkboxId"></td> 
     <td>{{result.id}}</td> 
     <td>{{result.name}}</td> 
     <td>{{result.type}}</td> 
     <td>{{result.groupName}}</td> 
     <td>{{result.warnThreshold}}</td> 
     <td>{{result.errorThreshold}}</td> 
     <td>{{result.monitorResult}}</td> 
     <td> <p ng-style="changeColor(result.compareResult)">{{result.compareResult}}</p> </td> 
     <td>{{result.lastRunTime}}</td> 
     <td> <button class="btn btn-primary" ng-click="runMonitorNew(result.id,result.groupName)">Run</button> </td> 
     <td ng-show="result.triggerRunning"><button class="btn btn-primary" ng-click="pause(result.id,result.groupName)">Pause</button> </td> 
     <td ng-show="!result.triggerRunning"><button class="btn btn-primary" ng-click="resume(result.id,result.groupName)">Resume</button> </td> 
    </tr> 

這是我在調試器

enter image description here

你能看的見,我已經取代了「結果」的「monitorResults」,因爲它給了我訪問數組,但事情是當我通過調試器檢查代碼時,我發現monitorId和groupname是未定義的。因此,我已經使用monitorResults [0] .id和monitorResults [0] .groupName,但它給了我只訪問數組中的第一個元素,如何獲得每個元素的訪問?

+1

你爲什麼換成''monitorResults' result'? 'result.groupName'和'result.id'應該給你想要的結果 – nikhil

+1

你能在塊中顯示更多的html視圖嗎?我想看看td元素在tr之外的意思。 –

+0

ok,lemme 3分鐘 – Anton

回答

0

解釋你的函數:

$scope.pauseChecked = function(monitorId, groupName) { //you might be getting monitorId and group name properly 
    for (var i = 0; i < $scope.monitorResults.length; i++) { //maybe you are looping to get all selected elements 
    if (document.getElementById('checkboxId').checked) { //this will never work properly, because it will only find the first element(due to id which may/maynot be checked), plus why are you trying to do this? 
     adminService.pauseMonitor(monitorId, groupName).then(function(response) { 
     $scope.getMonitorResultsForSelectedGroups(); 
     $scope.filterResults(); 
     var keepGoing = true; 
     angular.forEach($scope.monitorResults, function(monitor) { 
      if (keepGoing) { 
      if (monitor.id == monitorId && groupName == monitor.groupName) { 
       monitor.triggerRunning = false; 
       keepGoing = false; 
      } 
      } 
     }); 
     }); 
    } 
    } 
}; 
+0

第一個函數可以訪問monitior內部的對象結果array, 第二個循環檢查函數得到了多少個元素, 第三個函數應該檢查checkboxId是否被選中執行下一個代碼 – Anton

+0

pauseChecked不是在ng-repeat中的任何地方調用的。 – Kop4lyf

+0

檢查monitorId和groupName是否也在暫停功能中未定義。由於該功能看起來不錯。 – Kop4lyf

2

由於您有兩個表已分離,所以在檢查結果時需要在範圍中設置一個模型,並且該模型是您應該在暫停按鈕中引用的模型。實際上,所有監視器,運行和暫停方法都不需要在方法中傳遞變量,這些方法應該在內部引用範圍變量checkboxId。這是框的檢查,應該設置結果爲true,以供其他方法使用。

有意義嗎?

編輯

我也會改變checkboxIdresult.checked並設置真或假。然後,其他操作的控制器方法應循環遍歷結果列表,並查找檢查的結果並使用它。

模式

使用了兩個分離的表等,這是在爲類似「器isChecked」,「isPaused得到」所需的操作上的陣列中的模型中的底部的屬性集爲具有表2中的圖案,管他呢。

表1然後具有調用控制器方法的按鈕。這些方法遍歷數組並檢查切換屬性的狀態(isChecked,isPaused或其他)。然後這些方法通過調用另一種方法並傳入滿足條件的模型來執行所需操作。

視圖表是彼此不可知的,所有識別模型的工作都發生在控制器中。視圖所做的唯一事情就是更新數組項目的屬性。

+0

所以你的意思是我必須從方法中取出所有的變量並傳遞給它只有checkboxId? – Anton

+0

上表方法不知道哪個結果模型屬於哪個複選框。然而,範圍確實如此。控制器可以訪問示波器。你所有的方法都在控制器中。因此,當方法在控制器中運行時,只需檢查範圍即可查看檢查了哪個複選框。從視圖內部向方法傳遞變量的模式僅適用於嵌套層次結構。 –

+0

這正是我的意思,上表不知道底部表中發生了什麼。我如何綁定它?最有趣的是,按鈕恢復監視器和暫停監視器工作正常,所以問題只在選中按鈕 – Anton