2016-04-06 3 views
2

Ich habe einen Filter, der einen Zufallswert generieren:AngularJS halten einen temporären Wert in ng-Wiederholungsschleife

function randomize() { 
    return function (input) { 
     if (input !== null && input !== undefined && input > 1) { 
      return Math.floor((Math.random() * input) + 1); 
     } 
    }; 
} 

Ich habe einen ng-repeat Block in meinem html:

<tr data-ng-repeat="config in Configs"> 
    <td> 
     <img src="/images/{{21|randomize}}.png" alt="1"> 
    </td> 
    <td> 
     <img src="/images/{{21|randomize}}.png" alt="2"> 
    </td> 

Aus was Sie sehen können, Bild im zweiten TD-Block könnte einen anderen Wert als der erste TD-Block haben, weil es eine neue Zufallszahl erzeugt.

Frage ist, wie kann ich die Zufallszahl aus dem ersten td-Block erzeugt und sie irgendwo wiederverwenden (zB zweiter td-Block) in der gleichen ng-repeat-Schleife?

Ich möchte es nur für die aktuelle Schleife halten.

Gibt es das überhaupt, ohne die $ scope und JS Datei zu berühren? Wenn nicht, was ist der einfachste Weg, dies zu tun?

Antwort

2

Sie können den Rückgabewert eines Filteraufrufs auf eine lokal begrenzte Variable setzen. Zum Beispiel

<tr data-ng-repeat="config in Configs"> 
    <td>{{rand1 = (21|randomize)}}.png</td> 
    <td>{{21|randomize}}.png</td> 
    <td>{{rand1}}</td> 
    </tr> 

Plunker Demo ~ http://plnkr.co/edit/djnXfH9JOC7wG1yiYIPT?p=preview

+0

, dass jede Schleife im ng-repeat hava den gleichen Wert –

+0

Sorry, ich war falsch machen, wird es nicht. aber du musst ein Paar Klammern für 21 | randomize setzen. Bitte ändere deine Antwort auf ng-init = "rand1 = (21 | randomize)" –

+0

@CaptainRib yup, vergiss die Parens. Ich habe trotzdem einen besseren Weg gefunden, der 'ng-init' vermeidet. – Phil

Verwandte Themen