2014-06-09 20 views
7

Sto lavorando con le direttive nel tutorial di "Shaping up with angular" di CodeSchool e mi sto confondendo con il funzionamento di alcune delle sintassi. Ad esempio, nel codice sottostante, ad esempio ng-repeat="product in store.products", vengono utilizzate versioni sia singolari che plurali della stessa parola anche quando un'espressione singolare non è stata dichiarata in precedenza (a mia conoscenza). Questo accade diverse volte.Confuso da Angular.js uso della sintassi plurale/singolare (tramite il tutorial di codeschool)

Can Angular interpreta l'intento dell'autore in questo modo ?!

index.html:

<!DOCTYPE html> 
<html ng-app="gemStore"> 
    <head> 
    <link rel="stylesheet" type="text/css" href="bootstrap.min.css" /> 
    <script type="text/javascript" src="angular.min.js"></script> 
    <script type="text/javascript" src="app.js"></script> 
    </head> 
    <body class="list-group" ng-controller="StoreController as store"> 
    <!-- Product Container --> 
    <div class="list-group-item" ng-repeat="product in store.products"> 
     <h3>{{product.name}} <em class="pull-right">{{product.price | currency}}</em></h3> 

     <!-- Image Gallery --> 
     <div class="gallery"> 
     <div class="img-wrap"> 
      <img ng-src="{{product.images[0]}}" /> 
     </div> 
     <ul class="img-thumbnails clearfix"> 
      <li class="small-image pull-left thumbnail" ng-repeat="image in product.images"> 
      <img ng-src="{{product.images[0]}}" /> 
      </li> 
     </ul> 
     </div> 
    </div> 
    </body> 
</html> 

app.js:

(function() { 
    var app = angular.module('gemStore', []); 

    app.controller('StoreController', function() { 
    this.products = gems; 
    }); 

    var gems = [{ 
    name: 'Azurite', 
    description: "Some gems have hidden qualities beyond their luster, beyond their shine... Azurite is one of those gems.", 
    shine: 8, 
    price: 110.50, 
    rarity: 7, 
    color: '#CCC', 
    faces: 14, 
    images: [ 
     "images/gem-02.gif", 
     "images/gem-05.gif", 
     "images/gem-09.gif" 
    ] 
    }, { 
    name: 'Bloodstone', 
    description: "Origin of the Bloodstone is unknown, hence its low value. It has a very high shine and 12 sides, however.", 
    shine: 9, 
    price: 22.90, 
    rarity: 6, 
    color: '#EEE', 
    faces: 12, 
    images: [ 
     "images/gem-01.gif", 
     "images/gem-03.gif", 
     "images/gem-04.gif" 
    ] 
    }, { 
    name: 'Zircon', 
    description: "Zircon is our most coveted and sought after gem. You will pay much to be the proud owner of this gorgeous and high shine gem.", 
    shine: 70, 
    price: 1100, 
    rarity: 2, 
    color: '#000', 
    faces: 6, 
    images: [ 
     "images/gem-06.gif", 
     "images/gem-07.gif", 
     "images/gem-10.gif" 
    ] 
    }]; 
})(); 
+1

https://docs.angularjs.org/api/ng/directive/ngRepeat –

+1

'product' non ha nulla a che fare con' store.products'. Potresti scrivere 'blahblah' in' store.products' – lucuma

risposta

8

Singolare/plurale viene utilizzato solo per il buon senso e la leggibilità del codice - non deve essere singolare/plurale. Si può fare

ng-repeat="whatever in store.products"` 

e quindi avere l'oggetto whatever disponibile all'interno (come: <img ng-src="{{whatever.images[0]}}" />).

Nel tuo caso, store.products non può essere modificato poiché si riferisce a un oggetto reale, mentre product è un nome completamente personalizzato da utilizzare nel ciclo di ripetizione.

Abbastanza comune nella programmazione. Come l'altra risposta, è simile alla sintassi for..in.

4

Questo è essenzialmente la stessa sintassi di JavaScript for...in loop. Significa per someTempVar in someArrayOrObject.

3

La direttiva ng-repeat="product in products" crea una nuova variabile product che è possibile fare riferimento all'interno del modello. Non c'è interpolazione singolare/plurale in corso.