2016-05-12 5 views
1

Ich denke, dass die Ausgabe des folgenden Codes Text 3 und Text 4 sein sollte, aber nicht die richtige bekommen. Irgendein Problem im Code dort?Angular LimitTo liefert keine korrekte Ausgabe

HTML

<body ng-app="angularjs-starter" ng-controller="MainCtrl"> 
    <h1>Hello {{name}}</h1> 
    <div ng-repeat="t in getTimes(4) | limitTo:-2">text {{$index+1}}</div> 
    </body> 

JS

var app = angular.module('angularjs-starter', []); 

    app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 
    $scope.getTimes = function(n) { 
     return new Array(n); 
    }; 
}); 
+0

@PirateX es auch negativ sein kann, bedeutet negativ beginnt es vom Ende –

+0

@WildWidow Wird '-5' als' gleich sein -2' dann? –

+0

@PirateX wenn das Array 2 Elemente hat -2 ist gleich wie -5. Wenn Sie die Länge des Arrays überschreiten, wird es einfach beim ersten Element stoppen –

Antwort

1

Ihr Code funktioniert nicht, weil Sie Duplikate in Ihrem Set haben und getTimes() ist Neuabstimmung [undefined, undefined, undefined, undefined].

Verwenden Sie in diesem Fall t in getTimes(4) | limitTo:-2 track by $index mit einer richtigen Array-Initialisierung oder verwenden Sie eine Funktion, die Duplikate vermeidet.

Ein weiteres Problem ist, dass $index immer von gestartet wird. So erhalten Sie nicht Text 3 und Text 4 wie Sie erwarten. Sie müssten text {{t}} verwenden, wenn Sie den Array-Wert möchten.

Beispiele:

Track von $ index

var app = angular.module('angularjs-starter', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.name = 'World'; 
 
    $scope.getTimes=function(n){ 
 
     return new Array(n); 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<body ng-app="angularjs-starter" ng-controller="MainCtrl"> 
 
    <h1>Hello {{name}}</h1> 
 
    <div ng-repeat="t in getTimes(4) | limitTo:-2 track by $index">text {{$index+3}}</div> 
 
</body>

OR

sequenzielle Array

var app = angular.module('angularjs-starter', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.name = 'World'; 
 
    $scope.getTimes = function(n){ 
 
     return Array.apply(null, {length: n}).map(Number.call, Number); // [0, 1, ..., n-1] 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<body ng-app="angularjs-starter" ng-controller="MainCtrl"> 
 
    <h1>Hello {{name}}</h1> 
 
    <div ng-repeat="t in getTimes(4) | limitTo: -2">text {{t+1}}</div> 
 
</body>

+0

Leute erwarten, "Text 2, Text 3" zu lesen, können Sie vielleicht Werte in Ihrem Array hinzufügen und es anzeigen, anstelle der Indizes aus dem "begrenzten" Array zum besseren Verständnis ... Ich bin mir nicht sicher, ob ich klar genug bin: p –

+0

siehe diese URL http://www.w3schools.com/angular/tryit.asp?filename=try_ng_ref_limitto_end sie können von der 4. Position drucken und sie verwenden limitTo und negativen Wert. –

+0

Ich habe Recht Ausgabe hier ist jsfiddle https://jsfiddle.net/tridip/hLkky28n/ Ich bekomme richtige Ausgabe, wenn wir Array im Voraus füllen. –

2

$index wird immer bei 0 beginnen, unabhängig von Ihrem limitTo Filter. Verwenden Sie einfach t direkt im Bindungsausdruck.

<body ng-app="angularjs-starter" ng-controller="MainCtrl"> 
    <h1>Hello {{name}}</h1> 
    <div ng-repeat="t in getTimes(4) | limitTo:-2">text {{t}} </div> 
    </body> 

    var app = angular.module('angularjs-starter', []); 

    app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 
    $scope.getTimes=function(n){ 
     return new Array(n); 
    }; 
}); 
+0

Können wir 'limitTo' auf' -2' stellen? –

+1

@PirateX Ja können wir, es bedeutet, dass wir vom Ende anfangen werden. http://www.w3schools.com/angular/ng_filter_limitto.asp –

+0

Ich versuchte es in Code-Snippet, das funktioniert nicht ... weiß nicht warum. –