2016-05-10 11 views
2

Ich habe eine Feder-App mit eckigen js und html auf der Client-Seite, und ich möchte die Informationen in der Ansicht alle 6 Sekunden für die ich setInterval-Funktion aber es zu aktualisieren nicht die Ansicht ändern dies ist mein Code

$scope.aat=function(){ 
       $http.get("http://localhost:8080/projet/getInspectionEnCoursDinspection") 
    .success(function (data) { 

    $scope.tab1=data; 
    console.log("size="+ $scope.inspectionEnCoursDinspection1.length); 

    }) 
} , 

setInterval(function(){ $scope.aat() },60000); 

und dies ist mein hTML-Ansicht

<table class="table table-bordered"> 
<tr ng-repeat="insp in tab1"> 
<td>Mat{{insp.vehicule.matricule}} 

<div ng-repeat="aa in insp.tests"> 
Test<ul><li ng-repeat="defaut in aa.defauts">{{defaut.nomDefaut}}</li></ul> 
</div> 

</td> 

<td><button ng-click="annulerTest()" 
            class="btn btn-default btnt"> 
            <i class="glyphicon glyphicon-remove"></i> 
           </button></td> 
</tr> 
</table> 

jede Hilfe werden die meisten

+1

60000ms ist jede Minute, nicht alle 6 Sekunden. – Bergi

+0

Versuchen Sie '' 'scope.apply''' zu' '' $ scope.aat''' zu verwenden, um Angular mitzuteilen, dass Änderungen an Ihrem Array registriert werden sollen. – vtange

+0

ok danke @Bergi, aber es ist nicht das Problem, die Ansicht ändert sich nicht, außer dass ich die Seite aktualisieren – amani92

Antwort

3

Re geschätzt werden lated: angular doesn't apply changes to array(remove item on socket event)

Dies liegt daran, dass Sie mit setInterval $ scope.tab1 mit $ scope.aat modifizieren.

Wenn Sie Ihre Daten mit einem beliebigen nicht-eckigen Code ändern, wird Ihre Ansicht desynchronisiert, da Angular nicht über die Änderung informiert ist (es hat die Arbeit nicht ausgeführt, daher würde es es nicht wissen).

Sie können dies beheben, indem Sie entweder Angulars $interval anstelle von setInterval verwenden, um Ihre Aktualisierungen zu wiederholen. Oder fügen Sie $scope.apply() in $scope.aat hinzu, um Angular zu informieren, alles erneut auf Änderungen zu überprüfen.

In diesem Fall ist es besser, $ interval zu verwenden. $ scope.apply() sollte der letzte Ausweg sein.

$scope.aat=function(){ 
       $http.get("http://localhost:8080/projet/getInspectionEnCoursDinspection") 
    .success(function (data) { 

    $scope.tab1=data; 
    console.log("size="+ $scope.inspectionEnCoursDinspection1.length); 
    //this--->$scope.apply(); 
    }) 
} , 

//OR this-->$interval(function(){ $scope.aat() },60000); 
+0

$ interval ... Ich versuche nur .apply() zu verwenden, wenn es keine gibt eckige Alternative. – Tyler

+0

@Tyler Einverstanden, nur OP seine Optionen kennenlernen – vtange

+0

Prost. Die Erklärung von .apply() ist nützlich für andere Fälle, in denen eine eingebaute Funktion nicht möglich ist. – Tyler

Verwandte Themen