0

j'ai un objet $scope.myData qui contient une liste d'adresses et dates que j'ai propre/loué, par exemple:AngularJS - Affichage des données Date des articles seulement dans les cinq dernières années

Example of my data 
From Date 2011 To Date current 
From Date 2010 To Date 2011 
From Date 2009 To Date 2010 
From Date 2003 To Date 2004 

Ce que je suis en train faire est de sortie déclaration qui affiche les années que j'ai possédé/loué dans les 5 dernières années.

JS:

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 

    $scope.myData = { 

    "Entries": [{ 
     "EntryNumber": "E1", 
     "FromDt": "/Date(1320912000000)/", 
     "ToDt": null, 
     "RegisteredWith": "test" 

     }, { 
     "EntryNumber": "A1", 
     "FromDt": "/Date(1276153200000)/", 
     "ToDt": "/Date(1320912000000)/", 
     "RegisteredWith": "test" 

     }, { 
     "EntryNumber": "X1", 
     "FromDt": "/Date(1239346800000)/", 
     "ToDt": "/Date(1276153200000)/", 
     "RegisteredWith": "test" 

     }, { 
     "EntryNumber": "Z1", 
     "FromDt": "/Date(1063177200000)/", 
     "ToDt": "/Date(1086850800000)/", 
     "RegisteredWith": "test" 
     } 

    ] 
    } 

}); 

HTML:

<p> 
    In the last 5 years i have had addresses during (from {{ myData.Entries.FromDt.substring(6, myData.Entries.FromDt.length - 2) | date:'yyyy' }} to {{ }}, {{ }} to {{ }}, {{ }} to {{ }} and {{ }} to {{ }}). 

</p> 

Exemple de résultat attendu:

<p> 
    In the last 5 years i have had addresses during (from 2011 to current, 2010 to 2011 and 2009 to 2010) 

</p> 

est ici un PLU nker: http://plnkr.co/edit/N55Zlb2ahjgovoVwTV63?p=preview

Répondre

1

Il semble que vous deviez utiliser un filter et ng-repeat sur un <span>. Votre logique est en grande partie correcte dans votre ng-repeat de <li> s. Vous pouvez simplement le déplacer dans un <span> pour garder tout entre vos parenthèses.

index.html:

<p> 
    In the last 5 years i have had addresses during (<span ng-repeat="data in myData.Entries | filter:onlyLastFiveYears"> -from {{ parseDate(data.FromDt) }} to {{ parseDate(data.ToDt) }}</span>) 
</p> 

app.js:

app.controller('MainCtrl', function($scope) { 
    // ... 

    $scope.parseDate = function(date) { 
    return ((date === null && 'current') || new Date(parseInt(date.substring(6, date.length - 2))).getFullYear()) 
    } 

    $scope.onlyLastFiveYears = function(data) { 
    var currentYear = new Date().getFullYear(); 
    var houseYear = $scope.parseDate(data.FromDt); 
    return (currentYear - houseYear <= 5); 
    } 

}); 

J'ai modifié votre plunkr here. Bonne chance!

+0

grande réponse, fait ce que les questions demandent, je ne suis pas sûr que c'est le plus efficace ?? –

+1

Il existe généralement plusieurs façons d'accomplir la même tâche dans AngularJS. Vous avez raison de dire que vous pourriez utiliser un filtre séparé ou extraire une partie de cette logique dans un service ou une usine. J'essayais d'offrir une solution simple ici. – naserca

Questions connexes