2016-05-21 1 views
1

У меня есть простой AngularJs применение медицинских карт.Почему массив сохраняет последние данные и не очищается?

У меня есть хранилище с ним и отображать его на своем home.html с помощью dx-datagrid:

enter image description here

Одна карта имеет много записей, я получаю записи карты из recordsArray по cardId

getVardsRecordsByCardId: function (id, recordsArray) { 
     if (recordsArray.length != 0) { 
      for (var i = 0; i < recordsArray.length; i++) { 
       if (recordsArray[i].cardId === id) { 
        cardsRecords = cardsRecords.concat(recordsArray[i]); 
       } 
      } 
     } 

     return cardsRecords; 

    } 

сейчас У меня есть записи только в третьей карте. Я добавил функцию на кнопку для тестирования:

var jdskla = []; 
var localCardId = 0; 
$scope.showCardDetails = { 
    text: "", 
    type: "default", 
    icon: "preferences", 
    onClick: function() { 
     if ($scope.itemIdFromShowButton) { 
      $location.path('/carddetail/' + $scope.itemIdFromShowButton); 
      var jdskla =[]; 
      var jdskla = businessLogicOfMyApp.getVardsRecordsByCardId($scope.itemIdFromShowButton, $scope.recordsArray); 
      console.log($scope.itemIdFromShowButton) 
      console.log(jdskla); 

     } 
     else { 
      alert("Error!!!"); 
     } 
    } 
}; 

enter image description here

1,3,1 является cardId «s и array записей. Но почему array карточных записей не удаляет и сохраняет последние данные?

Может быть, кто-нибудь знает, как я могу это решить? Спасибо за ваши ответы!

P.S. Я использую ng-view директиву в моем приложении, и я пытался очистить мое array использовать другую кнопку:

$scope.backToGeneralPage = { 
    text: "Back", 
    onClick: function() { 
     jdskla = []; 
     $location.path('/'); 
    } 
}; 

, но это не было полезно.

+0

Я думаю, вы хотите просто изменить, где вы использовали array.concat для array.push. –

+0

@Mike Feltman, спасибо, я изменил его, но он все еще не работает. –

+0

Обратите внимание, что вы используете 'var jdskla' дважды в разных областях javascript, поэтому на самом деле есть две разные переменные с одинаковым именем – charlietfl

ответ

2

Вы должны инициализировать картыRecords array в функции getVardsRecordsByCardId.

getVardsRecordsByCardId: function (id, recordsArray) { 
    var cardsRecords = []; // initialize array locally 
    if (recordsArray.length != 0) { 
     for (var i = 0; i < recordsArray.length; i++) { 
      if (recordsArray[i].cardId === id) { 
       cardsRecords.push(recordsArray[i]); 
      } 
     } 
    } 
    return cardsRecords; 
} 
+0

О, боже, я инициализировал его на моей фабрике, после того, как я инициализировал внутри своего метода, он работает, спасибо! –